Skip to content

Commit 35251f5

Browse files
AlinaVarkkidevtools-frontend-scoped@luci-project-accounts.iam.gserviceaccount.com
authored andcommitted
Reland "[AI] Change LcpBreakdownAiWidget into PerfInsightAiWidget to be able to support more insights widgets"
This is a reland of commit 8daab95 Original change's description: > [AI] Change LcpBreakdownAiWidget into PerfInsightAiWidget to be able to support more insights widgets > > Bug: 503296282 > Change-Id: If4183ad5e76614402eeeccc2323138df56e1b917 > Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/7768136 > Commit-Queue: Jack Franklin <jacktfranklin@chromium.org> > Reviewed-by: Jack Franklin <jacktfranklin@chromium.org> > Auto-Submit: Alina Varkki <alinavarkki@chromium.org> Bug: 503296282 Change-Id: I73e6cf23ee1cd40fbb9eb994923b0576c4741990 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/7772138 Commit-Queue: Alina Varkki <alinavarkki@chromium.org> Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
1 parent e713e59 commit 35251f5

File tree

5 files changed

+44
-35
lines changed

5 files changed

+44
-35
lines changed

front_end/models/ai_assistance/agents/AiAgent.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,11 @@ export interface PerformanceTraceAiWidget {
248248
};
249249
}
250250

251-
export interface LcpBreakdownAiWidget {
252-
name: 'LCP_BREAKDOWN';
251+
export interface PerfInsightAiWidget {
252+
name: 'PERF_INSIGHT';
253253
data: {
254-
lcpData: Trace.Insights.Models.LCPBreakdown.LCPBreakdownInsightModel,
254+
insight: 'lcp',
255+
insightData: Trace.Insights.Types.InsightModel,
255256
};
256257
}
257258

@@ -276,7 +277,7 @@ export interface BottomUpTreeAiWidget {
276277

277278
// This type will grow as we add more widgets.
278279
export type AiWidget = ComputedStyleAiWidget|CoreVitalsAiWidget|StylePropertiesAiWidget|DomTreeAiWidget|
279-
PerformanceTraceAiWidget|LcpBreakdownAiWidget|TimelineRangeSummaryAiWidget|BottomUpTreeAiWidget;
280+
PerformanceTraceAiWidget|PerfInsightAiWidget|TimelineRangeSummaryAiWidget|BottomUpTreeAiWidget;
280281

281282
export type FunctionCallHandlerResult<Result> = {
282283
requiresApproval: true,

front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Content:
4343
],
4444
"widgets": [
4545
{
46-
"name": "LCP_BREAKDOWN"
46+
"name": "PERF_INSIGHT"
4747
},
4848
{
4949
"name": "CORE_VITALS"

front_end/models/ai_assistance/agents/PerformanceAgent.test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,7 @@ code
835835
assert.lengthOf(secondActions[0].widgets!, 1);
836836
});
837837

838-
it('yields an LCP_BREAKDOWN widget when getInsightDetails is called for LCPBreakdown', async function() {
838+
it('yields an lcp-type PERF_INSIGHT widget when getInsightDetails is called for LCPBreakdown', async function() {
839839
const parsedTrace = await TraceLoader.traceEngine(this, 'lcp-images.json.gz');
840840
assert.isOk(parsedTrace.insights);
841841
const [nav] = parsedTrace.data.Meta.mainFrameNavigations;
@@ -873,9 +873,10 @@ code
873873
assert.lengthOf(actions, 1);
874874

875875
assert.exists(actions[0].widgets);
876-
const lcpWidget = actions[0].widgets?.find(w => w.name === 'LCP_BREAKDOWN');
876+
const lcpWidget = actions[0].widgets?.find(w => w.name === 'PERF_INSIGHT');
877877
assert.exists(lcpWidget);
878-
assert.strictEqual(lcpWidget?.data.lcpData, insightSet.model.LCPBreakdown);
878+
assert.strictEqual(lcpWidget?.data.insight, 'lcp');
879+
assert.strictEqual(lcpWidget?.data.insightData, insightSet.model.LCPBreakdown);
879880
});
880881

881882
it('yields a BOTTOM_UP_TREE widget when getDetailedCallTree is called', async function() {

front_end/models/ai_assistance/agents/PerformanceAgent.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -527,9 +527,10 @@ export class PerformanceAgent extends AiAgent<AgentFocus> {
527527
if (focus.insight && Trace.Insights.Models.LCPBreakdown.isLCPBreakdownInsight(focus.insight) &&
528528
!this.#hasShownWidgetForInsight.has(focus.insight)) {
529529
widgets.push({
530-
name: 'LCP_BREAKDOWN',
530+
name: 'PERF_INSIGHT',
531531
data: {
532-
lcpData: focus.insight,
532+
insight: 'lcp',
533+
insightData: focus.insight,
533534
},
534535
});
535536
this.#hasShownWidgetForInsight.add(focus.insight);
@@ -993,9 +994,10 @@ export class PerformanceAgent extends AiAgent<AgentFocus> {
993994
}
994995
if (params.insightName === 'LCPBreakdown') {
995996
widgets.push({
996-
name: 'LCP_BREAKDOWN',
997+
name: 'PERF_INSIGHT',
997998
data: {
998-
lcpData: insight as Trace.Insights.Models.LCPBreakdown.LCPBreakdownInsightModel,
999+
insight: 'lcp',
1000+
insightData: insight as Trace.Insights.Types.InsightModel,
9991001
},
10001002
});
10011003
}

front_end/panels/ai_assistance/components/ChatMessage.ts

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import * as Root from '../../../core/root/root.js';
1313
import * as SDK from '../../../core/sdk/sdk.js';
1414
import type * as Protocol from '../../../generated/protocol.js';
1515
import type {
16-
AiWidget, BottomUpTreeAiWidget, ComputedStyleAiWidget, CoreVitalsAiWidget, DomTreeAiWidget, LcpBreakdownAiWidget,
16+
AiWidget, BottomUpTreeAiWidget, ComputedStyleAiWidget, CoreVitalsAiWidget, DomTreeAiWidget, PerfInsightAiWidget,
1717
PerformanceTraceAiWidget, StylePropertiesAiWidget,
1818
TimelineRangeSummaryAiWidget} from '../../../models/ai_assistance/agents/AiAgent.js';
1919
import * as AiAssistanceModel from '../../../models/ai_assistance/ai_assistance.js';
@@ -879,27 +879,32 @@ async function makeStylePropertiesWidget(widgetData: StylePropertiesAiWidget): P
879879
};
880880
}
881881

882-
async function makeLcpBreakdownWidget(widgetData: LcpBreakdownAiWidget): Promise<WidgetMakerResponse|null> {
883-
const insight = widgetData.data.lcpData;
884-
if (!insight) {
885-
return null;
882+
async function makePerfInsightWidget(widgetData: PerfInsightAiWidget): Promise<WidgetMakerResponse|null> {
883+
switch (widgetData.data.insight) {
884+
case 'lcp': {
885+
const insight = widgetData.data.insightData;
886+
if (!insight || !Trace.Insights.Models.LCPBreakdown.isLCPBreakdownInsight(insight)) {
887+
return null;
888+
}
889+
// clang-format off
890+
const renderedWidget = html`<devtools-widget
891+
class="lcp-breakdown-widget"
892+
${widget(TimelineInsights.LCPBreakdown.LCPBreakdown, {
893+
model: insight,
894+
minimal: true,
895+
})}></devtools-widget>`;
896+
// clang-format on
897+
898+
return {
899+
renderedWidget,
900+
revealable: new TimelineUtils.Helpers.RevealableInsight(insight),
901+
title: lockedString(UIStringsNotTranslate.lcpBreakdown),
902+
jslogContext: 'lcp-breakdown',
903+
};
904+
}
905+
default:
906+
return null;
886907
}
887-
888-
// clang-format off
889-
const renderedWidget = html`<devtools-widget
890-
class="lcp-breakdown-widget"
891-
${widget(TimelineInsights.LCPBreakdown.LCPBreakdown, {
892-
model: insight,
893-
minimal: true,
894-
})}></devtools-widget>`;
895-
// clang-format on
896-
897-
return {
898-
renderedWidget,
899-
revealable: new TimelineUtils.Helpers.RevealableInsight(insight),
900-
title: lockedString(UIStringsNotTranslate.lcpBreakdown),
901-
jslogContext: 'lcp-breakdown',
902-
};
903908
}
904909

905910
async function makeBottomUpTimelineTreeWidget(widgetData: BottomUpTreeAiWidget): Promise<WidgetMakerResponse|null> {
@@ -1097,8 +1102,8 @@ async function renderWidgets(
10971102
case 'PERFORMANCE_TRACE':
10981103
response = await makePerformanceTraceWidget(widgetData);
10991104
break;
1100-
case 'LCP_BREAKDOWN':
1101-
response = await makeLcpBreakdownWidget(widgetData);
1105+
case 'PERF_INSIGHT':
1106+
response = await makePerfInsightWidget(widgetData);
11021107
break;
11031108
case 'TIMELINE_RANGE_SUMMARY':
11041109
response = await makeTimelineRangeSummaryWidget(widgetData);

0 commit comments

Comments
 (0)