Skip to content

Commit 92804d9

Browse files
authored
Improve collection of summary columns efficiency (#4391)
1 parent 63dfa18 commit 92804d9

File tree

4 files changed

+51
-24
lines changed

4 files changed

+51
-24
lines changed

extension/src/experiments/columns/model.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ import {
66
collectParamsFiles
77
} from './collect'
88
import { EXPERIMENT_COLUMN_ID, timestampColumn } from './constants'
9-
import { SummaryAcc, collectFromColumnOrder } from './util'
9+
import {
10+
MAX_SUMMARY_ORDER_LENGTH,
11+
SummaryAcc,
12+
collectFromColumnOrder as collectSummaryColumnOrder,
13+
limitSummaryOrder
14+
} from './util'
1015
import { Column, ColumnType } from '../webview/contract'
1116
import { ExpShowOutput } from '../../cli/dvc/contract'
1217
import { PersistenceKey } from '../../persistence/constants'
@@ -49,17 +54,18 @@ export class ColumnsModel extends PathSelectionModel<Column> {
4954
const acc: SummaryAcc = { metrics: [], params: [] }
5055
for (const path of this.columnOrderState) {
5156
const reachedMaxSummaryOrderLength =
52-
acc.metrics.length >= 3 && acc.params.length >= 3
53-
if (
54-
this.status[path] !== Status.SELECTED ||
55-
reachedMaxSummaryOrderLength
56-
) {
57+
acc.metrics.length >= MAX_SUMMARY_ORDER_LENGTH &&
58+
acc.params.length >= MAX_SUMMARY_ORDER_LENGTH
59+
if (reachedMaxSummaryOrderLength) {
60+
return limitSummaryOrder(acc)
61+
}
62+
if (this.status[path] !== Status.SELECTED) {
5763
continue
5864
}
59-
collectFromColumnOrder(path, acc)
65+
collectSummaryColumnOrder(path, acc)
6066
}
6167

62-
return [...acc.params.slice(0, 3), ...acc.metrics.slice(0, 3)]
68+
return limitSummaryOrder(acc)
6369
}
6470

6571
public getColumnWidths(): Record<string, number> {
Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,29 @@
11
import { ColumnType } from '../webview/contract'
22

3+
export const MAX_SUMMARY_ORDER_LENGTH = 3
4+
35
export type SummaryAcc = {
46
metrics: string[]
57
params: string[]
68
}
79

810
export const collectFromColumnOrder = (path: string, acc: SummaryAcc) => {
9-
if (path.startsWith(ColumnType.METRICS)) {
11+
if (
12+
path.startsWith(ColumnType.METRICS) &&
13+
acc.metrics.length < MAX_SUMMARY_ORDER_LENGTH
14+
) {
1015
acc.metrics.push(path)
11-
} else if (path.startsWith(ColumnType.PARAMS)) {
16+
return
17+
}
18+
if (
19+
path.startsWith(ColumnType.PARAMS) &&
20+
acc.params.length < MAX_SUMMARY_ORDER_LENGTH
21+
) {
1222
acc.params.push(path)
1323
}
1424
}
25+
26+
export const limitSummaryOrder = (acc: SummaryAcc): string[] => [
27+
...acc.params.slice(0, MAX_SUMMARY_ORDER_LENGTH),
28+
...acc.metrics.slice(0, MAX_SUMMARY_ORDER_LENGTH)
29+
]

extension/src/experiments/model/tree.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,11 @@ export class ExperimentsTree
218218
return []
219219
}
220220

221-
private formatExperiment(experiment: ExperimentAugmented, dvcRoot: string) {
221+
private formatExperiment(
222+
experiment: ExperimentAugmented,
223+
dvcRoot: string,
224+
summaryColumns: string[]
225+
) {
222226
return {
223227
collapsibleState: experiment.hasChildren
224228
? TreeItemCollapsibleState.Expanded
@@ -233,11 +237,7 @@ export class ExperimentsTree
233237
iconPath: this.getExperimentIcon(experiment),
234238
id: experiment.id,
235239
label: experiment.label,
236-
tooltip: this.getTooltip(
237-
experiment.error,
238-
experiment,
239-
this.experiments.getRepository(dvcRoot).getSummaryColumnOrder()
240-
),
240+
tooltip: this.getTooltip(experiment.error, experiment, summaryColumns),
241241
type: experiment.type
242242
}
243243
}
@@ -252,21 +252,29 @@ export class ExperimentsTree
252252
return [{ error: cliError }]
253253
}
254254

255+
const summaryColumns = repository.getSummaryColumnOrder()
255256
return repository
256257
.getWorkspaceAndCommits()
257-
.map(experiment => this.formatExperiment(experiment, dvcRoot))
258+
.map(experiment =>
259+
this.formatExperiment(experiment, dvcRoot, summaryColumns)
260+
)
258261
}
259262

260263
private getExperimentsByCommit(
261264
dvcRoot: string,
262265
commit: Experiment
263266
): ExperimentItem[] {
267+
const repository = this.experiments.getRepository(dvcRoot)
268+
const summaryColumns = repository.getSummaryColumnOrder()
264269
return (
265-
this.experiments
266-
.getRepository(dvcRoot)
270+
repository
267271
.getCommitExperiments(commit)
268272
?.map(experiment =>
269-
this.formatExperiment(experiment as ExperimentAugmented, dvcRoot)
273+
this.formatExperiment(
274+
experiment as ExperimentAugmented,
275+
dvcRoot,
276+
summaryColumns
277+
)
270278
) || []
271279
)
272280
}

extension/src/plots/model/index.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ export class PlotsModel extends ModelWithPersistence {
214214

215215
public getSelectedRevisionDetails() {
216216
const selectedRevisions: Revision[] = []
217+
const summaryColumns = this.experiments.getSummaryColumnOrder()
217218
for (const experiment of this.experiments.getSelectedRevisions()) {
218219
const { commit, description, label, displayColor, id } = experiment
219220
const revision: Revision = {
@@ -223,10 +224,7 @@ export class PlotsModel extends ModelWithPersistence {
223224
fetched: this.fetchedRevs.has(id),
224225
id,
225226
label,
226-
summaryColumns: getRevisionSummaryColumns(
227-
this.experiments.getSummaryColumnOrder(),
228-
experiment
229-
)
227+
summaryColumns: getRevisionSummaryColumns(summaryColumns, experiment)
230228
}
231229

232230
if (commit) {

0 commit comments

Comments
 (0)