11/* eslint no-console:off */
22/* global console */
33
4- import { ENV } from '@ember/-internals/environment/lib/env' ;
5- import { assert } from '@ember/debug' ;
4+ import {
5+ _instrumentStart ,
6+ NOOP ,
7+ resetCache ,
8+ subscribers ,
9+ } from './lib/internal-instrument' ;
10+ import type { Listener , StructuredProfilePayload , Subscriber } from './lib/internal-instrument' ;
611
7- export interface Listener < T > {
8- before : ( name : string , timestamp : number , payload : object ) => T ;
9- after : ( name : string , timestamp : number , payload : object , beforeValue : T ) => void ;
10- }
11-
12- export interface Subscriber < T > {
13- pattern : string ;
14- regex : RegExp ;
15- object : Listener < T > ;
16- }
12+ export type { Listener , StructuredProfilePayload , Subscriber } ;
13+ export { _instrumentStart } ;
1714
1815export interface PayloadWithException {
1916 exception ?: any ;
2017}
2118
22- export interface StructuredProfilePayload {
23- object : string | object ;
24- }
25-
2619/**
2720@module @ember /instrumentation
2821@private
@@ -78,23 +71,7 @@ export interface StructuredProfilePayload {
7871 @static
7972 @private
8073*/
81- export let subscribers : Subscriber < any > [ ] = [ ] ;
82- let cache : { [ key : string ] : Listener < any > [ ] } = { } ;
83-
84- function populateListeners ( name : string ) {
85- let listeners : Listener < any > [ ] = [ ] ;
86-
87- for ( let subscriber of subscribers ) {
88- if ( subscriber . regex . test ( name ) ) {
89- listeners . push ( subscriber . object ) ;
90- }
91- }
92-
93- cache [ name ] = listeners ;
94- return listeners ;
95- }
96-
97- const time = ( ) : number => performance . now ( ) ;
74+ export { subscribers } ;
9875
9976type InstrumentCallback < Binding , Result > = ( this : Binding ) => Result ;
10077
@@ -196,67 +173,6 @@ function withFinalizer<Binding, Result>(
196173 }
197174}
198175
199- function NOOP ( ) { }
200-
201- // private for now
202- export function _instrumentStart ( name : string , payloadFunc : ( ) => object ) : ( ) => void ;
203- export function _instrumentStart < Arg > (
204- name : string ,
205- payloadFunc : ( arg : Arg ) => object ,
206- payloadArg : Arg
207- ) : ( ) => void ;
208- export function _instrumentStart < Arg > (
209- name : string ,
210- payloadFunc : ( ( arg : Arg ) => object ) | ( ( ) => object ) ,
211- payloadArg ?: Arg
212- ) : ( ) => void {
213- if ( subscribers . length === 0 ) {
214- return NOOP ;
215- }
216-
217- let listeners = cache [ name ] ;
218-
219- if ( ! listeners ) {
220- listeners = populateListeners ( name ) ;
221- }
222-
223- if ( listeners . length === 0 ) {
224- return NOOP ;
225- }
226-
227- let payload = payloadFunc ( payloadArg ! ) ;
228-
229- let STRUCTURED_PROFILE = ENV . STRUCTURED_PROFILE ;
230- let timeName : string ;
231- if ( STRUCTURED_PROFILE ) {
232- timeName = `${ name } : ${ ( payload as StructuredProfilePayload ) . object } ` ;
233- console . time ( timeName ) ;
234- }
235-
236- let beforeValues : any [ ] = [ ] ;
237- let timestamp = time ( ) ;
238- for ( let listener of listeners ) {
239- beforeValues . push ( listener . before ( name , timestamp , payload ) ) ;
240- }
241-
242- const constListeners = listeners ;
243-
244- return function _instrumentEnd ( ) : void {
245- let timestamp = time ( ) ;
246- for ( let i = 0 ; i < constListeners . length ; i ++ ) {
247- let listener = constListeners [ i ] ;
248- assert ( 'has listener' , listener ) ; // Iterating over values
249- if ( typeof listener . after === 'function' ) {
250- listener . after ( name , timestamp , payload , beforeValues [ i ] ) ;
251- }
252- }
253-
254- if ( STRUCTURED_PROFILE ) {
255- console . timeEnd ( timeName ) ;
256- }
257- } ;
258- }
259-
260176/**
261177 Subscribes to a particular event or instrumented block of code.
262178
@@ -292,7 +208,7 @@ export function subscribe<T>(pattern: string, object: Listener<T>): Subscriber<T
292208 } ;
293209
294210 subscribers . push ( subscriber ) ;
295- cache = { } ;
211+ resetCache ( ) ;
296212
297213 return subscriber ;
298214}
@@ -317,7 +233,7 @@ export function unsubscribe(subscriber: Subscriber<any>): void {
317233 }
318234
319235 subscribers . splice ( index , 1 ) ;
320- cache = { } ;
236+ resetCache ( ) ;
321237}
322238
323239/**
@@ -330,5 +246,5 @@ export function unsubscribe(subscriber: Subscriber<any>): void {
330246*/
331247export function reset ( ) : void {
332248 subscribers . length = 0 ;
333- cache = { } ;
249+ resetCache ( ) ;
334250}
0 commit comments