From 438d086dd53e85c035e2735e8e94bdcdd26079b4 Mon Sep 17 00:00:00 2001 From: xu_yanfeng Date: Fri, 27 Dec 2024 21:08:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86=E5=87=BAhierarchy=E5=92=8Cin?= =?UTF-8?q?spector=EF=BC=8C=E4=BE=BF=E4=BA=8E=E9=80=BB=E8=BE=91=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cc-inspector/src/views/devtools/bridge.ts | 26 +- cc-inspector/src/views/devtools/bus.ts | 3 +- cc-inspector/src/views/devtools/hierarchy.vue | 302 ++++++++++++ cc-inspector/src/views/devtools/index.vue | 435 ++---------------- cc-inspector/src/views/devtools/inspector.vue | 82 ++++ cc-inspector/src/views/devtools/store.ts | 2 + .../src/views/devtools/test/server.ts | 12 +- cc-inspector/src/views/devtools/test/test.vue | 2 +- .../src/views/devtools/ui/property-group.vue | 7 +- 9 files changed, 453 insertions(+), 418 deletions(-) create mode 100644 cc-inspector/src/views/devtools/hierarchy.vue create mode 100644 cc-inspector/src/views/devtools/inspector.vue diff --git a/cc-inspector/src/views/devtools/bridge.ts b/cc-inspector/src/views/devtools/bridge.ts index 7850f56..538ab69 100644 --- a/cc-inspector/src/views/devtools/bridge.ts +++ b/cc-inspector/src/views/devtools/bridge.ts @@ -1,4 +1,5 @@ import CCP from "cc-plugin/src/ccp/entry-render"; +import { TinyEmitter } from "tiny-emitter"; import { Msg, Page, PluginEvent } from "../../core/types"; import { Terminal } from "../../scripts/terminal"; import { TestClient, testServer } from "./test/server"; @@ -7,11 +8,7 @@ if (chrome.devtools) { console.log("chrome devtools"); } class Bridge implements TestClient { - /** - * 把callback保存为变量,方便测试 - */ - public onMessage: BridgeCallback | null = null; - + private emitter = new TinyEmitter(); /** * 和background建立的链接 */ @@ -32,24 +29,25 @@ class Bridge implements TestClient { this.connect.onMessage.addListener((event, sender: chrome.runtime.Port) => { const data = PluginEvent.create(event); console.log(...this.terminal.chunkMessage(data.toChunk())); - if (data.valid && this.onMessage) { - this.onMessage(data, sender); + if (data.valid && data.isTargetDevtools()) { + this.emitter.emit(data.msg, data.data); } else { console.log(JSON.stringify(event)); + debugger; } }); } else { testServer.add(this); } } - - recv(event: PluginEvent): void { - this.doMessage(event); + on(msg: Msg, callback: Function) { + this.emitter.on(msg, callback); } - doMessage(data: PluginEvent) { - if (this.onMessage) { - this.onMessage(data, null); - } + recv(event: PluginEvent): void { + this.emit(event); + } + emit(data: PluginEvent) { + this.emitter.emit(data.msg, data); } send(msg: Msg, data?: any) { if (CCP.Adaptation.Env.isChromeDevtools) { diff --git a/cc-inspector/src/views/devtools/bus.ts b/cc-inspector/src/views/devtools/bus.ts index cd341f4..6ffac30 100644 --- a/cc-inspector/src/views/devtools/bus.ts +++ b/cc-inspector/src/views/devtools/bus.ts @@ -3,9 +3,8 @@ import { TinyEmitter } from "tiny-emitter"; export enum BusMsg { ShowPlace = "ShowPlace", RequestObjectData = "RequestObjectData", - LogData = "LogData", FoldAllGroup = "FoldAllGroup", UpdateSettings = "UpdateSettings", } -export default new TinyEmitter(); +export const Bus = new TinyEmitter(); diff --git a/cc-inspector/src/views/devtools/hierarchy.vue b/cc-inspector/src/views/devtools/hierarchy.vue new file mode 100644 index 0000000..fff389d --- /dev/null +++ b/cc-inspector/src/views/devtools/hierarchy.vue @@ -0,0 +1,302 @@ + + + diff --git a/cc-inspector/src/views/devtools/index.vue b/cc-inspector/src/views/devtools/index.vue index 0b30d18..4fa8bf2 100644 --- a/cc-inspector/src/views/devtools/index.vue +++ b/cc-inspector/src/views/devtools/index.vue @@ -12,22 +12,9 @@ JS堆栈大小: {{ memory.performance.totalJSHeapSize }} JS堆栈使用: {{ memory.performance.usedJSHeapSize }} -
-
-
Node Tree
- -
- - - - - - -
+ -
- -
+ @@ -37,21 +24,21 @@ + diff --git a/cc-inspector/src/views/devtools/store.ts b/cc-inspector/src/views/devtools/store.ts index eca967f..3a12b90 100644 --- a/cc-inspector/src/views/devtools/store.ts +++ b/cc-inspector/src/views/devtools/store.ts @@ -23,7 +23,9 @@ export class ConfigData { export const appStore = defineStore("app", () => { const config = ref(new ConfigData()); + const frameID = ref(0); return { + frameID, config, init() { profile.init(new ConfigData(), pluginConfig); diff --git a/cc-inspector/src/views/devtools/test/server.ts b/cc-inspector/src/views/devtools/test/server.ts index 51a6d29..6834ff9 100644 --- a/cc-inspector/src/views/devtools/test/server.ts +++ b/cc-inspector/src/views/devtools/test/server.ts @@ -1,5 +1,5 @@ import { v4 } from "uuid"; -import { Msg, Page, PluginEvent, RequestNodeInfoData, RequestObjectData, ResponseNodeInfoData, ResponseObjectData, ResponseTreeInfoData } from "../../../core/types"; +import { Msg, Page, PluginEvent, RequestNodeInfoData, RequestObjectData, ResponseNodeInfoData, ResponseObjectData, ResponseSupportData, ResponseTreeInfoData } from "../../../core/types"; import { ArrayData, BoolData, ColorData, EngineData, EnumData, Group, ImageData, Info, InvalidData, NodeInfoData, NumberData, ObjectData, ObjectItemRequestData, Property, StringData, TextData, TreeData, Vec2Data, Vec3Data, Vec4Data } from "../data"; export class TestClient { recv(event: PluginEvent) {} @@ -98,8 +98,18 @@ export class TestServer { add(client: TestClient) { this.clients.push(client); } + private count: number = 0; recv(msg: string, data: any) { switch (msg) { + case Msg.RequestSupport: { + this.count++; + const e = new PluginEvent(Page.Background, Page.Devtools, Msg.ResponseSupport, { + support: this.count > 10, + msg: "", + } as ResponseSupportData); + this.send(e); + break; + } case Msg.RequestNodeInfo: { const id: string = (data as RequestNodeInfoData).uuid; const node: Node = this.testData.findNode(id); diff --git a/cc-inspector/src/views/devtools/test/test.vue b/cc-inspector/src/views/devtools/test/test.vue index 0ebe105..2f0f5be 100644 --- a/cc-inspector/src/views/devtools/test/test.vue +++ b/cc-inspector/src/views/devtools/test/test.vue @@ -94,7 +94,7 @@ export default defineComponent({ children: [], }; const event = new PluginEvent(Page.Inject, Page.Devtools, Msg.ResponseTreeInfo, data); - bridge.doMessage(event); + bridge.emit(event); }, onFrames() { const data: FrameDetails[] = [ diff --git a/cc-inspector/src/views/devtools/ui/property-group.vue b/cc-inspector/src/views/devtools/ui/property-group.vue index 62b35f8..af4b00d 100644 --- a/cc-inspector/src/views/devtools/ui/property-group.vue +++ b/cc-inspector/src/views/devtools/ui/property-group.vue @@ -15,7 +15,9 @@