11import { EMsg , windowListen , windowPost } from './api/communication.ts' ;
22import { IS_DEV } from './api/env.ts' ;
3- import { TELEMETRY_FREQUENCY_1PS } from './api/const.ts' ;
4- import { adjustTelemetryDelay , Stopper , Timer } from './api/time.ts' ;
3+ import {
4+ TELEMETRY_FREQUENCY_1PS ,
5+ TELEMETRY_FREQUENCY_30PS ,
6+ } from './api/const.ts' ;
7+ import { adjustTelemetryDelay , Timer } from './api/time.ts' ;
58import {
69 onEachSecond ,
710 setSettings ,
@@ -13,76 +16,63 @@ import {
1316} from './wrapper/Wrapper.ts' ;
1417import diff from './api/diff.ts' ;
1518
16- let original : TTelemetry | null ;
17- let resetOriginalWhen = 0 ;
18- const resetOriginalNow = 5 ;
19+ let originalMetrics : TTelemetry | null ;
20+ let currentMetrics : TTelemetry | null ;
1921const eachSecond = new Timer ( { delay : 1e3 , repetitive : true } , ( ) => {
2022 onEachSecond ( ) ;
21-
22- if ( ++ resetOriginalWhen === resetOriginalNow ) {
23- original = null ;
24- resetOriginalWhen = 0 ;
25- }
2623} ) ;
27- const metricsStopper = new Stopper ( ) ;
28- const diffStopper = new Stopper ( ) ;
2924const tick = new Timer (
30- { delay : TELEMETRY_FREQUENCY_1PS , repetitive : true } ,
25+ { delay : TELEMETRY_FREQUENCY_1PS , repetitive : false } ,
3126 function apiMonitorTelemetryTick ( ) {
3227 const now = Date . now ( ) ;
28+ currentMetrics = structuredClone ( collectMetrics ( ) ) ;
3329
34- // @ts -ignore
35- window . stoppers = [
36- Stopper . toString ( metricsStopper . value ( ) ) ,
37- Stopper . toString ( diffStopper . value ( ) ) ,
38- ] ;
39-
40- if ( ! original ) {
41- metricsStopper . start ( ) ;
42- const current = collectMetrics ( ) ;
43- original = structuredClone ( current ) ;
44- metricsStopper . stop ( ) ;
30+ if ( ! originalMetrics ) {
31+ originalMetrics = currentMetrics ;
4532
4633 windowPost ( {
4734 msg : EMsg . TELEMETRY ,
4835 timeOfCollection : now ,
49- telemetry : original ,
36+ telemetry : originalMetrics ,
5037 } ) ;
5138 } else {
52- diffStopper . start ( ) ;
53- const current = collectMetrics ( ) ;
54- const delta = diff . diff ( original , current ) ;
55- diffStopper . stop ( ) ;
39+ const delta = diff . diff ( originalMetrics , currentMetrics ) ;
5640
57- if ( ! delta ) {
58- return ;
41+ if ( delta ) {
42+ windowPost ( {
43+ msg : EMsg . TELEMETRY ,
44+ timeOfCollection : now ,
45+ telemetryDelta : delta ,
46+ } ) ;
47+ } else {
48+ tick . delay = TELEMETRY_FREQUENCY_30PS ;
49+ tick . start ( ) ;
5950 }
60-
61- windowPost ( {
62- msg : EMsg . TELEMETRY ,
63- timeOfCollection : now ,
64- telemetryDelta : delta ,
65- } ) ;
6651 }
6752 }
6853) ;
6954
7055windowListen ( ( o ) => {
7156 if ( o . msg === EMsg . TELEMETRY_ACKNOWLEDGED ) {
7257 tick . delay = adjustTelemetryDelay ( o . timeOfCollection ) ;
58+ originalMetrics = currentMetrics ;
59+ tick . start ( ) ;
7360 } else if (
7461 o . msg === EMsg . SETTINGS &&
7562 o . settings &&
7663 typeof o . settings === 'object'
7764 ) {
7865 setSettings ( o . settings ) ;
7966 } else if ( o . msg === EMsg . START_OBSERVE ) {
80- tick . start ( ) ;
67+ originalMetrics = null ;
68+ tick . trigger ( ) ;
8169 eachSecond . start ( ) ;
8270 } else if ( o . msg === EMsg . STOP_OBSERVE ) {
8371 tick . stop ( ) ;
8472 eachSecond . stop ( ) ;
73+ originalMetrics = currentMetrics = null ;
8574 } else if ( o . msg === EMsg . RESET_WRAPPER_HISTORY ) {
75+ originalMetrics = null ;
8676 cleanHistory ( ) ;
8777 ! tick . isPending && tick . trigger ( ) ;
8878 } else if ( o . msg === EMsg . TIMER_COMMAND ) {
0 commit comments