11import * as lil from 'lil-gui' ;
2- import { Rect , Group , CanvasEvent } from '@antv/g' ;
3- import type { Canvas } from '@antv/g' ;
2+ import {
3+ type Canvas ,
4+ Rect ,
5+ Group ,
6+ CanvasEvent ,
7+ ElementEvent ,
8+ runtime ,
9+ } from '@antv/g' ;
10+
11+ runtime . enablePerformanceOptimization = false ;
412
513export async function attrUpdate ( context : { canvas : Canvas ; gui : lil . GUI } ) {
614 const { canvas, gui } = context ;
@@ -9,9 +17,9 @@ export async function attrUpdate(context: { canvas: Canvas; gui: lil.GUI }) {
917 await canvas . ready ;
1018
1119 const { width, height } = canvas . getConfig ( ) ;
12- const count = 2e4 ;
1320 const root = new Group ( ) ;
14- const rects = [ ] ;
21+ let count = 1e4 ;
22+ let rects = [ ] ;
1523
1624 const perfStore : { [ k : string ] : { count : number ; time : number } } = {
1725 update : { count : 0 , time : 0 } ,
@@ -28,6 +36,7 @@ export async function attrUpdate(context: { canvas: Canvas; gui: lil.GUI }) {
2836 }
2937
3038 function update ( ) {
39+ // console.log('update');
3140 // const startTime = performance.now();
3241 // console.time('update');
3342
@@ -53,6 +62,9 @@ export async function attrUpdate(context: { canvas: Canvas; gui: lil.GUI }) {
5362 }
5463
5564 function render ( ) {
65+ root . destroyChildren ( ) ;
66+ rects = [ ] ;
67+
5668 for ( let i = 0 ; i < count ; i ++ ) {
5769 const x = Math . random ( ) * width ;
5870 const y = Math . random ( ) * height ;
@@ -66,17 +78,28 @@ export async function attrUpdate(context: { canvas: Canvas; gui: lil.GUI }) {
6678 width : size ,
6779 height : size ,
6880 fill : 'white' ,
69- stroke : 'black' ,
81+ stroke : '#000' ,
82+ lineWidth : 1 ,
7083 } ,
7184 } ) ;
7285 root . appendChild ( rect ) ;
7386 rects [ i ] = { x, y, size, speed, el : rect } ;
87+
88+ // rect.isMutationObserved = true;
89+ rect . addEventListener ( ElementEvent . ATTR_MODIFIED , ( ) => {
90+ console . log ( ElementEvent . ATTR_MODIFIED ) ;
91+ } ) ;
7492 }
7593 }
7694
7795 render ( ) ;
7896 canvas . addEventListener ( CanvasEvent . BEFORE_RENDER , ( ) => update ( ) ) ;
7997
98+ // root.isMutationObserved = true;
99+ // canvas.addEventListener(ElementEvent.BOUNDS_CHANGED, () => {
100+ // console.log('first');
101+ // });
102+
80103 canvas . appendChild ( root ) ;
81104
82105 canvas . addEventListener (
@@ -88,18 +111,23 @@ export async function attrUpdate(context: { canvas: Canvas; gui: lil.GUI }) {
88111 ) ;
89112
90113 // GUI
114+ // canvas.getConfig().renderer.getConfig().enableCulling = true;
91115 canvas . getConfig ( ) . renderer . getConfig ( ) . enableRenderingOptimization = true ;
116+ const observeConfig = {
117+ objectCount : count ,
118+ enableRenderingOptimization : canvas . getConfig ( ) . renderer . getConfig ( )
119+ . enableRenderingOptimization ,
120+ enablePerformanceOptimization : runtime . enablePerformanceOptimization ,
121+ } ;
92122
93- gui
94- . add (
95- {
96- enableRenderingOptimization : canvas . getConfig ( ) . renderer . getConfig ( )
97- . enableRenderingOptimization ,
98- } ,
99- 'enableRenderingOptimization' ,
100- )
101- . onChange ( ( result ) => {
102- canvas . getConfig ( ) . renderer . getConfig ( ) . enableRenderingOptimization =
103- result ;
104- } ) ;
123+ gui . add ( observeConfig , 'objectCount' ) . onChange ( ( value ) => {
124+ count = value ;
125+ render ( ) ;
126+ } ) ;
127+ gui . add ( observeConfig , 'enablePerformanceOptimization' ) . onChange ( ( value ) => {
128+ runtime . enablePerformanceOptimization = value ;
129+ } ) ;
130+ gui . add ( observeConfig , 'enableRenderingOptimization' ) . onChange ( ( value ) => {
131+ canvas . getConfig ( ) . renderer . getConfig ( ) . enableRenderingOptimization = value ;
132+ } ) ;
105133}
0 commit comments