Skip to content

Commit d480fe4

Browse files
committed
perf(timeline): manual painting
1 parent 33ab23c commit d480fe4

File tree

1 file changed

+44
-7
lines changed

1 file changed

+44
-7
lines changed

packages/app-frontend/src/features/timeline/TimelineView.vue

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ export default defineComponent({
9090
9191
let app: PIXI.Application
9292
93+
let mainRenderTexture: PIXI.RenderTexture
94+
let mainRenderContainer: PIXI.Container
95+
9396
let verticalScrollingContainer: PIXI.Container
9497
let horizontalScrollingContainer: PIXI.Container
9598
@@ -109,13 +112,37 @@ export default defineComponent({
109112
app.view.style.opacity = '1'
110113
})
111114
115+
mainRenderTexture = PIXI.RenderTexture.create({
116+
width: app.view.width,
117+
height: app.view.height,
118+
resolution: window.devicePixelRatio,
119+
})
120+
const mainRenderSprite = new PIXI.Sprite(mainRenderTexture)
121+
app.stage.addChild(mainRenderSprite)
122+
123+
mainRenderContainer = new PIXI.Container()
124+
112125
verticalScrollingContainer = new PIXI.Container()
113-
app.stage.addChild(verticalScrollingContainer)
126+
mainRenderContainer.addChild(verticalScrollingContainer)
114127
115128
horizontalScrollingContainer = new PIXI.Container()
116129
verticalScrollingContainer.addChild(horizontalScrollingContainer)
117130
})
118131
132+
let drawScheduled = false
133+
134+
function draw () {
135+
if (!drawScheduled) {
136+
drawScheduled = true
137+
Vue.nextTick(() => {
138+
app.renderer.render(mainRenderContainer, {
139+
renderTexture: mainRenderTexture,
140+
})
141+
drawScheduled = false
142+
})
143+
}
144+
}
145+
119146
onUnmounted(() => {
120147
app.destroy()
121148
})
@@ -276,6 +303,7 @@ export default defineComponent({
276303
} else {
277304
layerHoverEffect.visible = false
278305
}
306+
draw()
279307
}
280308
281309
function drawLayerBackground (layerId: Layer['id'], alpha = 1) {
@@ -376,6 +404,7 @@ export default defineComponent({
376404
while ((event = updateEventVerticalPositionQueue.shift())) {
377405
computeEventVerticalPosition(event)
378406
}
407+
draw()
379408
}
380409
381410
function isEventIgnored (event: TimelineEvent) {
@@ -622,6 +651,7 @@ export default defineComponent({
622651
drawEventGroup(event)
623652
}
624653
}
654+
draw()
625655
}
626656
627657
watch(startTime, () => queueEventsUpdate())
@@ -834,12 +864,8 @@ export default defineComponent({
834864
text.push(`Group: ${event.group.duration}ms (${event.group.events.length} event${event.group.events.length > 1 ? 's' : ''})`)
835865
}
836866
837-
if (hoverEvent?.container && hoverEvent !== event) {
838-
hoverEvent.container.alpha = 1
839-
}
840-
hoverEvent = event
841-
if (hoverEvent?.container) {
842-
hoverEvent.container.alpha = 0.5
867+
if (event?.container) {
868+
event.container.alpha = 0.5
843869
}
844870
} else {
845871
// Marker tooltip
@@ -850,6 +876,13 @@ export default defineComponent({
850876
text.push('(marker)')
851877
}
852878
}
879+
if (event !== hoverEvent) {
880+
if (hoverEvent?.container) {
881+
hoverEvent.container.alpha = 1
882+
}
883+
draw()
884+
}
885+
hoverEvent = event
853886
854887
if (text.length) {
855888
// Draw tooltip
@@ -1035,6 +1068,7 @@ export default defineComponent({
10351068
drawLayerBackgroundEffects()
10361069
drawTimeGrid()
10371070
drawMarkers()
1071+
draw()
10381072
}
10391073
10401074
watch(startTime, () => queueCameraUpdate())
@@ -1110,6 +1144,7 @@ export default defineComponent({
11101144
function updateVScroll () {
11111145
if (verticalScrollingContainer) {
11121146
verticalScrollingContainer.y = -vScroll.value
1147+
draw()
11131148
}
11141149
}
11151150
@@ -1181,10 +1216,12 @@ export default defineComponent({
11811216
app.view.style.opacity = '0'
11821217
// @ts-expect-error PIXI type is missing queueResize
11831218
app.queueResize()
1219+
mainRenderTexture.resize(app.view.width, app.view.height)
11841220
queueEventsUpdate()
11851221
drawLayerBackgroundEffects()
11861222
drawTimeCursor()
11871223
drawTimeGrid()
1224+
draw()
11881225
}
11891226
11901227
// Events

0 commit comments

Comments
 (0)