chore(deps): integrate cef2gtk presentation synchronization
- commit
- 8e234aa0672cf5b4d0f5f6cda42a89e26d8e3459
- author
- brice · · 2026-07-14 08:45 UTC
- committer
- brice · · 2026-07-14 09:35 UTC
- parent
- 0d8c582
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
7 files · +134 -19
M go.mod +1 -1
| @@ -7,7 +7,7 @@ require ( | |||
| 7 | 7 | github.com/andybalholm/brotli v1.2.2 | |
| 8 | 8 | github.com/bnema/purego v0.11.0-bnema.4 | |
| 9 | 9 | github.com/bnema/purego-cef v0.13.3 | |
| 10 | - | github.com/bnema/purego-cef2gtk v0.8.3 | |
| 10 | + | github.com/bnema/purego-cef2gtk v0.8.4-0.20260714083412-f217ece342de | |
| 11 | 11 | github.com/bnema/purego-pipewire v0.1.4 | |
| 12 | 12 | github.com/bnema/purego-sqlite v0.1.3 | |
| 13 | 13 | github.com/bnema/puregotk v0.7.0 | |
| @@ -7,7 +7,7 @@ require ( | |||||
| 7 | github.com/andybalholm/brotli v1.2.2 | 7 | github.com/andybalholm/brotli v1.2.2 | ||
| 8 | github.com/bnema/purego v0.11.0-bnema.4 | 8 | github.com/bnema/purego v0.11.0-bnema.4 | ||
| 9 | github.com/bnema/purego-cef v0.13.3 | 9 | github.com/bnema/purego-cef v0.13.3 | ||
| 10 | - | github.com/bnema/purego-cef2gtk v0.8.3 | 10 | + | github.com/bnema/purego-cef2gtk v0.8.4-0.20260714083412-f217ece342de |
| 11 | github.com/bnema/purego-pipewire v0.1.4 | 11 | github.com/bnema/purego-pipewire v0.1.4 | ||
| 12 | github.com/bnema/purego-sqlite v0.1.3 | 12 | github.com/bnema/purego-sqlite v0.1.3 | ||
| 13 | github.com/bnema/puregotk v0.7.0 | 13 | github.com/bnema/puregotk v0.7.0 | ||
M go.sum +2 -0 generated file: collapsed
M internal/logging/startup_trace.go +5 -1
| @@ -151,9 +151,13 @@ func (st *StartupTrace) mark(name string) bool { | |||
| 151 | 151 | ||
| 152 | 152 | now := st.now() | |
| 153 | 153 | milestone := Milestone{Name: name, Elapsed: now.Sub(st.t0)} | |
| 154 | + | // Published fields are integer milliseconds. Compute delta on that same | |
| 155 | + | // scale so delta_ms always exactly reconstructs t_ms in collected evidence. | |
| 156 | + | previousMilliseconds := int64(0) | |
| 154 | 157 | if len(st.milestones) > 0 { | |
| 155 | - | milestone.Delta = milestone.Elapsed - st.milestones[len(st.milestones)-1].Elapsed | |
| 158 | + | previousMilliseconds = st.milestones[len(st.milestones)-1].Elapsed.Milliseconds() | |
| 156 | 159 | } | |
| 160 | + | milestone.Delta = time.Duration(milestone.Elapsed.Milliseconds()-previousMilliseconds) * time.Millisecond | |
| 157 | 161 | st.milestones = append(st.milestones, milestone) | |
| 158 | 162 | if st.logger == nil { | |
| 159 | 163 | st.buffered = append(st.buffered, milestone) | |
| @@ -151,9 +151,13 @@ func (st *StartupTrace) mark(name string) bool { | |||||
| 151 | 151 | ||||
| 152 | now := st.now() | 152 | now := st.now() | ||
| 153 | milestone := Milestone{Name: name, Elapsed: now.Sub(st.t0)} | 153 | milestone := Milestone{Name: name, Elapsed: now.Sub(st.t0)} | ||
| 154 | + | // Published fields are integer milliseconds. Compute delta on that same | |||
| 155 | + | // scale so delta_ms always exactly reconstructs t_ms in collected evidence. | |||
| 156 | + | previousMilliseconds := int64(0) | |||
| 154 | if len(st.milestones) > 0 { | 157 | if len(st.milestones) > 0 { | ||
| 155 | - | milestone.Delta = milestone.Elapsed - st.milestones[len(st.milestones)-1].Elapsed | 158 | + | previousMilliseconds = st.milestones[len(st.milestones)-1].Elapsed.Milliseconds() |
| 156 | } | 159 | } | ||
| 160 | + | milestone.Delta = time.Duration(milestone.Elapsed.Milliseconds()-previousMilliseconds) * time.Millisecond | |||
| 157 | st.milestones = append(st.milestones, milestone) | 161 | st.milestones = append(st.milestones, milestone) | ||
| 158 | if st.logger == nil { | 162 | if st.logger == nil { | ||
| 159 | st.buffered = append(st.buffered, milestone) | 163 | st.buffered = append(st.buffered, milestone) | ||
M internal/logging/startup_trace_test.go +15 -0
| @@ -36,6 +36,21 @@ func TestStartupTraceAcceptsOnlyOrderedOneShotMilestones(t *testing.T) { | |||
| 36 | 36 | require.False(t, trace.Mark("first_gtk_presentation")) | |
| 37 | 37 | } | |
| 38 | 38 | ||
| 39 | + | func TestStartupTraceQuantizesDeltaToPublishedMilliseconds(t *testing.T) { | |
| 40 | + | now := time.Unix(100, 0) | |
| 41 | + | trace := newStartupTrace(func() time.Time { return now }) | |
| 42 | + | ||
| 43 | + | now = now.Add(1500 * time.Microsecond) | |
| 44 | + | require.True(t, trace.Mark("process_entry")) | |
| 45 | + | now = now.Add(900 * time.Microsecond) | |
| 46 | + | require.True(t, trace.Mark("config_complete")) | |
| 47 | + | ||
| 48 | + | require.Equal(t, int64(1), trace.milestones[0].Elapsed.Milliseconds()) | |
| 49 | + | require.Equal(t, int64(1), trace.milestones[0].Delta.Milliseconds()) | |
| 50 | + | require.Equal(t, int64(2), trace.milestones[1].Elapsed.Milliseconds()) | |
| 51 | + | require.Equal(t, int64(1), trace.milestones[1].Delta.Milliseconds()) | |
| 52 | + | } | |
| 53 | + | ||
| 39 | 54 | func TestStartupTraceFinishCannotFabricateFirstGTKPresentation(t *testing.T) { | |
| 40 | 55 | now := time.Unix(100, 0) | |
| 41 | 56 | trace := newStartupTrace(func() time.Time { return now }) | |
| @@ -36,6 +36,21 @@ func TestStartupTraceAcceptsOnlyOrderedOneShotMilestones(t *testing.T) { | |||||
| 36 | require.False(t, trace.Mark("first_gtk_presentation")) | 36 | require.False(t, trace.Mark("first_gtk_presentation")) | ||
| 37 | } | 37 | } | ||
| 38 | 38 | ||||
| 39 | + | func TestStartupTraceQuantizesDeltaToPublishedMilliseconds(t *testing.T) { | |||
| 40 | + | now := time.Unix(100, 0) | |||
| 41 | + | trace := newStartupTrace(func() time.Time { return now }) | |||
| 42 | + | ||||
| 43 | + | now = now.Add(1500 * time.Microsecond) | |||
| 44 | + | require.True(t, trace.Mark("process_entry")) | |||
| 45 | + | now = now.Add(900 * time.Microsecond) | |||
| 46 | + | require.True(t, trace.Mark("config_complete")) | |||
| 47 | + | ||||
| 48 | + | require.Equal(t, int64(1), trace.milestones[0].Elapsed.Milliseconds()) | |||
| 49 | + | require.Equal(t, int64(1), trace.milestones[0].Delta.Milliseconds()) | |||
| 50 | + | require.Equal(t, int64(2), trace.milestones[1].Elapsed.Milliseconds()) | |||
| 51 | + | require.Equal(t, int64(1), trace.milestones[1].Delta.Milliseconds()) | |||
| 52 | + | } | |||
| 53 | + | ||||
| 39 | func TestStartupTraceFinishCannotFabricateFirstGTKPresentation(t *testing.T) { | 54 | func TestStartupTraceFinishCannotFabricateFirstGTKPresentation(t *testing.T) { | ||
| 40 | now := time.Unix(100, 0) | 55 | now := time.Unix(100, 0) | ||
| 41 | trace := newStartupTrace(func() time.Time { return now }) | 56 | trace := newStartupTrace(func() time.Time { return now }) | ||