feat(devtools): performance events

This commit is contained in:
Guillaume Chau 2021-05-19 20:48:35 +02:00
parent 1355ee27a6
commit f7c54caeb1
2 changed files with 34 additions and 1 deletions

View File

@ -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,

View File

@ -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() {