feat(devtools): performance events
This commit is contained in:
parent
1355ee27a6
commit
f7c54caeb1
@ -15,7 +15,9 @@ const enum DevtoolsHooks {
|
|||||||
COMPONENT_UPDATED = 'component:updated',
|
COMPONENT_UPDATED = 'component:updated',
|
||||||
COMPONENT_ADDED = 'component:added',
|
COMPONENT_ADDED = 'component:added',
|
||||||
COMPONENT_REMOVED = 'component:removed',
|
COMPONENT_REMOVED = 'component:removed',
|
||||||
COMPONENT_EMIT = 'component:emit'
|
COMPONENT_EMIT = 'component:emit',
|
||||||
|
PERFORMANCE_START = 'perf:start',
|
||||||
|
PERFORMANCE_END = 'perf:end'
|
||||||
}
|
}
|
||||||
|
|
||||||
interface DevtoolsHook {
|
interface DevtoolsHook {
|
||||||
@ -73,6 +75,28 @@ function createDevtoolsComponentHook(hook: DevtoolsHooks) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook(
|
||||||
|
DevtoolsHooks.PERFORMANCE_START
|
||||||
|
)
|
||||||
|
|
||||||
|
export const devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook(
|
||||||
|
DevtoolsHooks.PERFORMANCE_END
|
||||||
|
)
|
||||||
|
|
||||||
|
function createDevtoolsPerformanceHook(hook: DevtoolsHooks) {
|
||||||
|
return (component: ComponentInternalInstance, type: string, time: number) => {
|
||||||
|
if (!devtools) return
|
||||||
|
devtools.emit(
|
||||||
|
hook,
|
||||||
|
component.appContext.app,
|
||||||
|
component.uid,
|
||||||
|
component,
|
||||||
|
type,
|
||||||
|
time
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function devtoolsComponentEmit(
|
export function devtoolsComponentEmit(
|
||||||
component: ComponentInternalInstance,
|
component: ComponentInternalInstance,
|
||||||
event: string,
|
event: string,
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { ComponentInternalInstance, formatComponentName } from './component'
|
import { ComponentInternalInstance, formatComponentName } from './component'
|
||||||
|
import { devtoolsPerfEnd, devtoolsPerfStart } from './devtools'
|
||||||
|
|
||||||
let supported: boolean
|
let supported: boolean
|
||||||
let perf: any
|
let perf: any
|
||||||
@ -10,6 +11,10 @@ export function startMeasure(
|
|||||||
if (instance.appContext.config.performance && isSupported()) {
|
if (instance.appContext.config.performance && isSupported()) {
|
||||||
perf.mark(`vue-${type}-${instance.uid}`)
|
perf.mark(`vue-${type}-${instance.uid}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) {
|
||||||
|
devtoolsPerfStart(instance, type, supported ? perf.now() : Date.now())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function endMeasure(instance: ComponentInternalInstance, type: string) {
|
export function endMeasure(instance: ComponentInternalInstance, type: string) {
|
||||||
@ -25,6 +30,10 @@ export function endMeasure(instance: ComponentInternalInstance, type: string) {
|
|||||||
perf.clearMarks(startTag)
|
perf.clearMarks(startTag)
|
||||||
perf.clearMarks(endTag)
|
perf.clearMarks(endTag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) {
|
||||||
|
devtoolsPerfEnd(instance, type, supported ? perf.now() : Date.now())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function isSupported() {
|
function isSupported() {
|
||||||
|
Loading…
Reference in New Issue
Block a user