Skip to content

Commit 854ca01

Browse files
committed
chore: add logging around workspace fetching and refetching logic
1 parent 5ebc004 commit 854ca01

File tree

1 file changed

+58
-4
lines changed

1 file changed

+58
-4
lines changed

src/workspacesProvider.ts

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
errToStr,
1313
} from "./api-helper"
1414
import { Storage } from "./storage"
15-
import { getMemoryLogger, MemoryLogger } from "./memoryLogger"
15+
import { getMemoryLogger } from "./memoryLogger"
1616

1717
export enum WorkspaceQuery {
1818
Mine = "owner:me",
@@ -57,10 +57,21 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
5757
// Calling this while already refreshing or not visible is a no-op and will
5858
// return immediately.
5959
async fetchAndRefresh() {
60-
if (this.fetching || !this.visible) {
60+
const logger = getMemoryLogger()
61+
62+
if (this.fetching) {
63+
logger.debug(`WorkspaceProvider(${this.getWorkspacesQuery}): Already fetching, ignoring refresh request`)
64+
return
65+
}
66+
67+
if (!this.visible) {
68+
logger.debug(`WorkspaceProvider(${this.getWorkspacesQuery}): Not visible, ignoring refresh request`)
6169
return
6270
}
71+
72+
logger.info(`WorkspaceProvider(${this.getWorkspacesQuery}): Starting workspace fetch`)
6373
this.fetching = true
74+
let fetchStart = Date.now()
6475

6576
// It is possible we called fetchAndRefresh() manually (through the button
6677
// for example), in which case we might still have a pending refresh that
@@ -70,12 +81,17 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
7081
let hadError = false
7182
try {
7283
this.workspaces = await this.fetch()
84+
logger.info(
85+
`WorkspaceProvider(${this.getWorkspacesQuery}): Fetch completed in ${Date.now() - fetchStart}ms, found ${this.workspaces.length} workspaces`,
86+
)
7387
} catch (error) {
7488
hadError = true
89+
logger.error(`WorkspaceProvider(${this.getWorkspacesQuery}): Fetch failed`, error)
7590
this.workspaces = []
7691
}
7792

7893
this.fetching = false
94+
logger.logMemoryUsage("WORKSPACE_PROVIDER_FETCH")
7995

8096
this.refresh()
8197

@@ -158,45 +174,83 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
158174
* If we have never fetched workspaces and are visible, fetch immediately.
159175
*/
160176
setVisibility(visible: boolean) {
177+
const logger = getMemoryLogger()
178+
179+
if (this.visible !== visible) {
180+
logger.info(`WorkspaceProvider(${this.getWorkspacesQuery}): Visibility changed to ${visible}`)
181+
}
182+
161183
this.visible = visible
184+
162185
if (!visible) {
163186
this.cancelPendingRefresh()
164187
} else if (!this.workspaces) {
188+
logger.info(`WorkspaceProvider(${this.getWorkspacesQuery}): Initial fetch required`)
165189
this.fetchAndRefresh()
166190
} else {
167191
this.maybeScheduleRefresh()
168192
}
169193
}
170194

171195
private cancelPendingRefresh() {
196+
const logger = getMemoryLogger()
197+
172198
if (this.timeout) {
199+
logger.debug(`WorkspaceProvider(${this.getWorkspacesQuery}): Canceling pending refresh`)
173200
clearTimeout(this.timeout)
174201
this.timeout = undefined
175202
}
176203
}
177-
178204
/**
179205
* Schedule a refresh if one is not already scheduled or underway and a
180206
* timeout length was provided.
181207
*/
182208
private maybeScheduleRefresh() {
209+
const logger = getMemoryLogger()
210+
183211
if (this.timerSeconds && !this.timeout && !this.fetching) {
212+
logger.debug(`WorkspaceProvider(${this.getWorkspacesQuery}): Scheduling refresh in ${this.timerSeconds} seconds`)
213+
184214
this.timeout = setTimeout(() => {
215+
logger.debug(`WorkspaceProvider(${this.getWorkspacesQuery}): Executing scheduled refresh`)
185216
this.fetchAndRefresh()
186217
}, this.timerSeconds * 1000)
187218
}
188219
}
189-
190220
private _onDidChangeTreeData: vscode.EventEmitter<vscode.TreeItem | undefined | null | void> =
191221
new vscode.EventEmitter<vscode.TreeItem | undefined | null | void>()
192222
readonly onDidChangeTreeData: vscode.Event<vscode.TreeItem | undefined | null | void> =
193223
this._onDidChangeTreeData.event
194224

195225
// refresh causes the tree to re-render. It does not fetch fresh workspaces.
196226
refresh(item: vscode.TreeItem | undefined | null | void): void {
227+
const logger = getMemoryLogger()
228+
logger.debug(
229+
`WorkspaceProvider(${this.getWorkspacesQuery}): Refreshing tree view${item ? " for specific item" : ""}`,
230+
)
231+
197232
this._onDidChangeTreeData.fire(item)
198233
}
199234

235+
dispose(): void {
236+
const logger = getMemoryLogger()
237+
logger.info(`WorkspaceProvider(${this.getWorkspacesQuery}): Disposing`)
238+
239+
// Cancel any pending refreshes
240+
this.cancelPendingRefresh()
241+
242+
// Dispose all watchers
243+
Object.keys(this.agentWatchers).forEach((id) => {
244+
logger.debug(`WorkspaceProvider(${this.getWorkspacesQuery}): Disposing agent watcher ${id}`)
245+
this.agentWatchers[id].dispose()
246+
})
247+
248+
this.agentWatchers = {}
249+
this.workspaces = undefined
250+
251+
logger.logMemoryUsage("WORKSPACE_PROVIDER_DISPOSE")
252+
}
253+
200254
async getTreeItem(element: vscode.TreeItem): Promise<vscode.TreeItem> {
201255
return element
202256
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy