From 41d39f73a4a6907d54e5968484b3669616d8726f Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Wed, 21 Feb 2024 01:50:14 +0000 Subject: [PATCH] Make the GL context current in EmbedderSurfaceGLImpeller before creating the GPU surface The GPUSurfaceGLImpeller ctor creates an AiksContext/ContentContext, which loads the shader pipelines. If the current thread does not have a GL context and can not execute ReactorGLES operations, then the pipeline futures will not complete. This can cause the raster thread to hang if the reactor has not run and the futures are still incomplete when a rendering task later needs to obtain the pipeline. --- shell/platform/embedder/BUILD.gn | 2 +- .../embedder/embedder_surface_gl_impeller.cc | 5 +++++ .../fixtures/impeller_gl_gradient.png | Bin 37220 -> 0 bytes .../embedder/fixtures/impeller_gl_test.png | Bin 0 -> 3274 bytes shell/platform/embedder/fixtures/main.dart | 18 ++++++++++++++++++ .../embedder/tests/embedder_gl_unittests.cc | 4 ++-- 6 files changed, 26 insertions(+), 3 deletions(-) delete mode 100644 shell/platform/embedder/fixtures/impeller_gl_gradient.png create mode 100644 shell/platform/embedder/fixtures/impeller_gl_test.png diff --git a/shell/platform/embedder/BUILD.gn b/shell/platform/embedder/BUILD.gn index b83364b8b099c..e4754f1d554c3 100644 --- a/shell/platform/embedder/BUILD.gn +++ b/shell/platform/embedder/BUILD.gn @@ -242,7 +242,7 @@ test_fixtures("fixtures") { "fixtures/dpr_noxform.png", "fixtures/dpr_xform.png", "fixtures/gradient.png", - "fixtures/impeller_gl_gradient.png", + "fixtures/impeller_gl_test.png", "fixtures/vk_dpr_noxform.png", "fixtures/vk_gradient.png", "fixtures/gradient_metal.png", diff --git a/shell/platform/embedder/embedder_surface_gl_impeller.cc b/shell/platform/embedder/embedder_surface_gl_impeller.cc index cae8037083cb7..c7efa86de8168 100644 --- a/shell/platform/embedder/embedder_surface_gl_impeller.cc +++ b/shell/platform/embedder/embedder_surface_gl_impeller.cc @@ -178,6 +178,11 @@ EmbedderSurfaceGLImpeller::GLContextFramebufferInfo() const { // |EmbedderSurface| std::unique_ptr EmbedderSurfaceGLImpeller::CreateGPUSurface() { + // Ensure that the GL context is current before creating the GPU surface. + // GPUSurfaceGLImpeller initialization will set up shader pipelines, and the + // current thread needs to be able to execute reactor operations. + GLContextMakeCurrent(); + return std::make_unique( this, // GPU surface GL delegate impeller_context_, // Impeller context diff --git a/shell/platform/embedder/fixtures/impeller_gl_gradient.png b/shell/platform/embedder/fixtures/impeller_gl_gradient.png deleted file mode 100644 index 76fd5b12f1f122de5e771763d7c0af67af28837d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37220 zcmchAc|6o>`#(oT$=0Gn!;n)d(jwWXvZP(hNw!3s6lKkBsK}B+X(zI^9DB$nBV;w&PiqY%$)D@JO4brp4W`Imuq=n?`yfePaId{Si!%7iHV8h&_R_` zOiV07OiaINvMmGu&okSb7T|xDSSua+lMVdm%x2`p#3aOYNM-+@_CY=9=KDQ=mx}2T zsl~>neu_``{kG&%-6|DK+h@6Ll?l0LQ;IL{Hry*bvEZxM%yQRj$6Kkr~Tc?&ne?Vz8 zI;Jb)@|XCU!svucy(_%fu9cY=`i=>gP|-JrTpBrpNK@$hu5RO|gCXp%SiCMw#&0&& z-KKW!b3gdTmM-_djM#?dHJP-QY30TL-C7@5(Xml_X^pOjnDbN-8ZTewN?;1B6^q^p zzR~KIhT2pT(6{C2!5d!tNcA_4x!wftZg?^+rz5r2iNb;pY z99QIC>S`th!YnN8XAqJjF{^VBZ>34^=I^iELPa z2Nrel*dbAI5#<-S?B9yOZ#3NBoZuvaD`e}iI}%3QHngGuuJ-XKyVcWQ?GRqN;kO2B z)?FNL8*~3oO+&~9dYX*44x>An!ZhV+yS;O{mY{suB)$Cl$_ni$3yBTkiPb49-xj+K zNo>J+ik=;-_x{4HlAxg}>{MNS?Q;_NxM8(slI>EJCFvb0hH5WZHOdSg+E`p{&m<88 z5E*MVWhc={x$B#&SNgmysIpQK<#0t8Kf8Zi^MJ=btlLumzx@A7-+1x@=>W!$rv$6WUO&h!v3kO)=h)Gb-9mQnDkT&Rw9V{9*wo&?9SA@7hHy#92N_sT(+gbi-9?D(@iV4ubOKGm_;feKC7_OK1V@0N{z%UN1X(^SKh-^4^;L5H~XyygR`*hkZbQvlowoTR(jI z%dKTbUe(&StaUr0@Oo)hsF|+uwuJ?&pGc+HKUESkplVd2L9xFa{^9Q?-3NBbtE$ zI{kV1ry}l7yLhIzE8iYX`Qva;V-aa*PE0eU9Nat)?dAuwb&&z>he&HSMeI{~;ncV9 z<^F0X&9%~xm0xuleG_+WaFP1t{ zQ6K93GmKj%*CVZ|6ku?3gcn!M)DdT-Wj8n*4w{u9>&N;X8j5gQvHBFG_;x~Hgb0e! zw*xB!PCt+NW?AJ;T?L6av$nYEAGiPH(;1slZn7 z(cC5lQC!!wZy3sjd+J-?0RLbHPtp;5RyD^rPz%iL;gy+&k-E^*dWJk=vz5q(U!@;CFY(-CccbV{pg-> zIZ>b4h|lP$*`WuuS@(#B?%%$UcwT|eIxJ>hfJaAf!Kp$1aHk+Vqlj50?GN@^kOR*P z6${(l{bSHvrtt+Z1)W?lj@^}Z?29fvc9+avaO~TF<+_bo47Ef!BZGCDhaRSKoo3}$ zb%G}{6V?8o0#&9s%4z5R4u&&oY@>KVKj5lq2&~ZuR%`UpXQB@jl zqQRMZUC!rXoTcOk#PG-9+y@Y_&wVFwbd~UgCZf>)(?hWKo9ovA1K9>=?F2|wE0Bw* zYDc%*(9=P*a}KZ@MX==^y#*}29_G?X{yyp(sLQ_6j(zvy_ECn6iUpP+Z2BPQx9uG$ zw?t=Tq6|0?W7-Ar0r2hlx$;^lGhbM;MzgNU0pl2Rphv77=T2d`)MNX}hl7-X;T_u^ z?XPHRDtEaKAcmc$;@TO%0Sr3yEkUH5C8{I-qnwPSbt8pzXoIKj(N$z=FLRoSSwG=u z^D9>Wj$B$PuOor%?p_R`qn8=W2Kll9Wb% z-oNffwRs)qpBjH6weflUos~CSSlNYuySsKIEU)jbGg2hT85skPyCpGO{h15EMDvI^ zWo0Q4lfW;`t#@Gp7ctBCVA)sUF1wtz>}=Yy*T7n~$Qza-9h!GJhI&FU{H)Lwoa4R* z3cLi0b{9EvMYXhBb=DhOJR;`$fpsgwUiTWZI;;O#cUS=6(1Z}-xysbtd`L>ZD#8+P z)G=^1YZlW?ns~eDj$>_@zRJRjgq%0}Zunvs%~BK#^VIhiIYPn`4xPF!jBw~U#_uUO z^}fX%QJ>IE!qyar)zGja{M@jGGV~?52PCOnHyA|gCldQ3S=i)YUjt2W}e*^@C9%d&z03ytUWsq0`@vM>p`?z5{gr|6D4=~w1V3H075k-Iz!wAr+(Sti* zu@p(elqGAL843befuGDn`O643ynGEcSJW2iN zdUI*R_2T7=hrh=$Tvtj-Xm{#VoSgfM_5Nhovc`9VDB{lD%KQ{2yNOw)cCQ}ehwnGo zFD(=TkG+}!uN)08it$R_6d7e{Av{bYOdLlk$#89uyIwr44)fDk)*;zi7_PmsgQZ2z zNM2uX>YDH`D;7^-s{jbNi-S&U{Iu}aTX2B=g>o zXe5_5Y>sQQ)iGS*hpuH2+vtK>oy-0bTvz9e6n(YczXL|}-%5GEseoi@mCoG7PP4dh zu7`I39Ta4?ubU>KixbmgmTS^5L=hFh*hJE=Mx7+ICLk;C!(i?p9cn=%A)9y__RYL| zLBx+KENQr2PsiPC#}y_VclGM$r_)~V@?#Gnqm&{lm|NN4*#s*xss&{9?$dEQBw7|l zxR`Gu;%U^p3BB*pNPP{B_NFTuDd+g8AW;nTpgx032%groj-WM@`WjgMWne>rZ$%`Y zFjp*z=>n8hgC%KXPF$fYfl49Ca|zLZIXIAklHN*`zYfzEap2Uvs`RzkAid zanw{UwK|JH&!$kgLh__}I&;E2+2i?O8t|+bB7VX*r5^5%6oJ*r>RQ$c-&pH4QM|C` zR2DC|nTM0D8EE8y-<4i86aD+?A3+Dv{9J)8Fitwfs{H z@K26*hLkwd`1O-Ba%V~ha~|Bx#O6~NzXz1v2w%5)@0NviTYGUP6l)d0g|pdRHh4y=jfntQxVwhlqu#v zrg1+UFVsq5t6BdrnM(*RkFIua5FMdgWbx`^1B(|uoE;7J{1!sQd)c_MKY}NCBw&T5 zq8*sLVe*bqnUVl*P9A7$tp>sar4eAT)Ckp&q7y(y#_8Ux166|u`@~y`DUk?B;mf65$Pk0p;~O}S-IhPSq$U?>*;Y# z0Ys6caa2pkpx{3ElxrL1V48okiy6+KBHco((18K_rwLMgH6QJm66Pxknw@BP|I!&* zlgo{xQ>{qrA0i&3q}x+D>DH~iDa80o=Tf76WP=&dv7B*WGw?Dnebs4nQF+v@j;z-b8)doxtNdxzG;^*jy?H1#9;i<&GaYvq<0(Ahr+=&e zYm?|PEGRFSrz}ZO=cDc=|lOfNZAZJsj_6%ua^cG{2Q-3#RnTGT@^#bAg?}?S;QTbxvhr zp<|s;-X0DUd=%qnu~(%vbvSKfY@{ENaoh6P3XOIqG9aV% z*&mU`qPiKo!vmDf$bGPK;qhB=te;6dqzZGTI8dnY3=V@0xqIOag^^|3EQ8Ul|7C+m zktBd;cCCw~C*KCxo4`3_tl4NKNs5XX^@Sz0_-1qRG zJ08jWiKK>^xA5*w6{+kPetyt zvOE`XgjW2!Kq=2mwwgwx+E1(+uqNuJ`+g`j^E;?VwQz#~Rcg>y{xl=-tV%;&2WC!>HC79NH^>;%@SBX&#+R3*<{ zQ9E6A^%H8_Ng5!ZS9%PK$@|&c>xBCa*Ys;E>nSf*lKpR{^=aW!7p%J~|B=*Tibgk{ zT+^?Iznrz(wDPA$il1YqC;($o!PHgb56dEV!{j3VxkHUEkx8Ct<&g)U7wt!Ys&IY` z2_IV#Mk+=hm&XY&QcgTOA(Nx+vYfWVUJ+NOv;$^$cN3}>*`WLw>VgFIae0hzB%R(q z!7_R%(KOAt{Oc&vk|~=Z$pI3sy--EnY&EPNITDfFR{^5sG!LnW zg<2V=#nTMqH-_toYfkn6<^nW6%-x6aFUR-P8QJXORb<&^eWd;wI!LP0m4hf{Vj8LS zYO&&P8rjFr*Vi#Bz#GH<*k((LBeJ8Ti@BA*+MiYcIIF#9ehsY6-JW2Gq$(k*{cG&Q zp&Ige`eHGOx-uU$)r)Z^uix-^$CrBZ0wC%x@)#AnL@poypD)Uwt)`Eay z8?Y~*fE~Q2GX(WsEL3L*RWCtMlnX}-dUX>0Eby`DiS>dEIl-7lwTU1F5|Ow*WRTyy z61EYo{RUm(UtC2}hY7aT(AR!w)B4%Em=6PLFo@OPR8zSx7N&z}mZzZ@(@`EX-59?i znjNH_<$`@fb2y3mZggImLtprmseRl@os6gjn-+esGENh#1$S?llE3*8?WYOq) zE}E>@FWfQpLu~lm#an=K&~*txbMiq3twU^{MjlYvavH-$Mh$|6Le9PiuCJeUmGuXa zWR@Z+D^uH=MJtkjMKu~k5tmYXB=yny>)6OSd+>-Iz3+dl+i}qKKYyVRH8qJId{Co# z4(cSErearoSl#`centuuLBlYnDCZ7{zc4F7<=mwt`3*5yahMi0EY@>1 zm$Rs%c!fy5nvr%xn>qWi9QT^DLj5(fMfK*ystnRes#Ipp>zH%FpwHkv{{#T5>nSHc#2akQmpm*(Ag7pAm=hh-ZR7j+!|M8izK zVYPT)QB)fv+eAnCbs)3lLhKpeCHXj#_3_^8x*{nTH`29D0={XAgX?ASqP{~J<0p%r zpg6Uh)^mdkO>^yN*t@z%q+Z4k^-<8@^g(q@7>vC6&oLCueGrH5$!~s6Gw!=g=V~ym zqBzJ~KwSf~F;44admW^x-4ta)Dih!U{m+X!kxSS-U-S%CsbD~A9Z1ur{6jS3I~}<8 zZE$;@0fz&}COWUP6|$N%^G>3<*#-UOQOG2N04~I3>D+5Xi3#Jx8G^6^YcT z=QKpq1v$|AhgvTG)B^n4&_1^_rQNVSvcpebK;7k|sq+y$Il5u@LipBD3R2w}@ehd{ zaIWs2yIJf9vUN7XO&w>G?wdCJk&l6(FofeVUkX>^)aoJCC`?g|d|WW3m2vs!7N_pX zOaYl6YRDl@>qusdUqIlO!XZEX=Q!Rlb4p)%&%k24{tMbQ;NWVCV#prg$D&NpCJshc?9yt z#_GZkCB$%=b~L==FEj3axuDs~7=xl7h3mSx{8kKac)}$J>rul$$dCJMk22l3P`iCx z-pOCM^%0Pvc7Ek&K90H&JB|1$-t=BH#SA$e(~2y<&+tHi047N$vk)WSU@OCW~khucR`t z9}gEAPB0%(1_q5A1kM!ctC!3wfUHRW(u$rHlEMN_h?pJk?04}_8L_l_0wRJllm|7J zD(-YgY$42=G4f0BI(Vd~b|xZtcJWWrfw{+v{E(9Nto|O?>7w0NN@I{6G?s)WA`x@W z8=0S~o`G36fF37L`Di#BmkU-MazkEm;+Z{uWPWQ6>XOFenzIgE?R^E^Z1V%=G1Ix4 z9U&?rh87J1qZRK_obT0l7mlHh`A$UuL(OMa>N3G@si~|Nt}6NWw{r_kaF{QU#dW!X z%=f>n&+6y9$Fkq8o89ZPfXT8Pu>_DC|M4-DQP2_%+QsC$?U%;!nP6{wf-$lScrx7J zgS6i(vQEx9ZQw`dI#lXkVghj%DV$q^qlF3BwmZBfug&ZjGgw?2AX$f=4vjB%MPzfm z%bFRJL*vo@CJos(K{Hxrm(LY#A9#m4?wjK0`jvUQ=4#Q+x&kT_)3(KWXP8s?oKqow z}4Y^M>MV4@2Dg#I_5 z*)v8Kuus*UcqmkOQsdvAXt&6v4#c9mu^!Uvl1DZ+te2W|md=k*OZz)pXgR{OD+uQj z0R=RmD9yI!$FAwu24^sSlm9eL&qGnzjcb;GvI&Ud1nYfCY>2rDcb5dblk4(x&)y!F z`HN{v`PbtD{SdjkY_3^B3+@kbaqnjk+5Uay15ZQWk7Ib&N=1Jp zC7hq0!ZRP62Etk~3aUl>o6C|gYB6fJY6$;ehgeGU58W4M50}nXT8&S zmSMJb_PC^lw>IG7JoUId5;&C8%bMbr{xS?_hC|y}S(rSN+rcwpVttMGiYHCb!bw-R z9|yLmazqWHdmjHYuVrpZ8$e-Sj33tKB8Thp$&VeU=u*T!d^++XZ}EY}Z!x<`@&r;B z{X{FC`{u2Bj)M|$1B`gj!bGHPr3vrNhYApub_ir_!+jV(eOArp?V&o#hv{&h^>t`n z622c@J3x)@fI!+^Fb``X<<#%zd(9P#x`6ZidU9V0jYxdXfDJ;FxzwH{5dF^I>Ua7* zp_YZlDN6k?!%56U^C8g?J3Yc_0hH9(O4-5gD!pMkMO3i5`20GMKn94Jv!H8B`YQ2#6Lg5M48~p`0(mG zM3G7G;{Z|^O8@9zZ}V$_4AJ)K@mmYT11aMuad#}T#Bu6KXN|o!Hk_U~Kbex+R|s0< zu_1-y>JBt)(P1SG?-aISxY&i$nIWpxi~%eK6usy5NH%G}j%~R*b}50letQCA^6%-4 z#Nq}i22)H{ck7=u&@BUwpvB6ro)+7|+#`Ue^-u0TK5< z&v#o0dqE~&(iz!NS7)9*uH)eSYNQ9=DO@C@Zr<8E^$%yy0OrJh<&rmf-b6_S#Tp>D zcJ`+!HZbv+KM_yT>A9Xs#Aot2jBnE%J$r^f>X-R83y?oFF#t>oLOqqr8;yPVxF|;J z5SYOBYUTU$>@(9Te~uhiqF6?W{O?Kwi|GKfRero!JK6wH^!T~@!v3hnw0H- zU%2wZxMHC}G}8?s=u0Itl?m?a3#-(MEEFgPYBA?Q202A^UjS!=-<+zY}2%j zJ<@VH>lLFqU^56E0SPe9vCa}F8AI)Z=m{4efgPY=i)#xM_C7>yq>J%}JRxfiX#huV z#oCnZy=jA~l6(TV--V$33$s@qB0&XB6Mp~32v&UB} zwn||lVX&m-&;Ctl(O6RZ(Oh3`Z)c<{i+}QT>=W|S)>7kuxLkWNy!suN1}= z5>slKaU*~ip9FA7Eab>`dbmSVl4S!#*f=}gpJJ;XxbtfGGdu|ZE%8_is0u1ID;s;n zs2$iif^Ma98wAnP3jf6tj*(Fpda*rB#vEOdKNoH-KscH8qGBltH;H)X1W(pH8c`2x z_X)R&_`MPs<_~S4Xb4rss3%|t^}^o*rfV$t{)-j74tn~fHwcf@lxge{-2s6K#*e$| z#B|NYqzXJJa2qrqdJNO*LwFc9f$2|(BB+TVV0LK{W6`=IVff8h0vJ_GK6v-$Em?s%y;lSvlP0VJIpD zwM;J9e9k7|SUtn19h2m4I&x#Q*w_{{(C>XVvR(d?7T60cL{JO3?XYp`b1ugs(CkohM)L2pzb51RXz@KQHk1Ar(A=Ju-qH#!aF>NM!4_Gl5Y zjWVE-m1z}BMiM5bA>Rjb!z2V|u3iznxBaU0A&?==(|K&qH&ohbbI9Onq1F`@V z0D{h99!N2`d20XyDkXpcP#|uxKB+@-|9AR3eevLXM_|HAzXd>5PIj$3r((7LsRg*h zORqollLok&e-NhnYv4iL@+^~|_nT9SK+UrHiH!%OYQ z$=nO)U}*6$`VFWx1?UZ=I2hk_4|t-0pbi1jf|cyTvnT5>Q1b#s0N~J!IkI!w0F`Q} zm+OA!-{%?T4uHYOcao4)&<5f9>m=`mb8EEF_alj?g{5?o>Anx)nSJl-?+-Q52lt$S zr4szT2N063TvvU2t9O^*-J||Aq^&WB@ zlQli)$`QAA*Q}Q%;HI>ugX0s}G#M^#-V(}Hpj`Z=%Gtzqf7G7|tmaml9L)>k_jR-a z2A{u?0r}Y~74%mtNMYT+n?vRu-@8z>IN&EL zKpk@2EK_TkJ&;)#=wto({NjIXhdB-M2%r zQ8y^#L4EKab%wpRZTRWTk(Q<=*r`G0vk;(v2`Rovn# zn}+#!<(AlToz!)EHMdJ{&SorKT2U zs%I_pF-gVb4*KcuRC%+f*$#R!1!l$@$O+Cofu&n|T?cbcm;<)AJxn9lVe{DJP4^6w zFZ@ccalx8@=AJBj4aVW<^&zvBW<4OZ7-!U9!snHFlLQmyt6%h9xW)0}%tMHL&6iQp(z`nSXC~hODb84jU_l;1qij+8< zrG?B@>Bf?D**RTv03Qydzlx;tF2Z_G0Yf(>;h(>mh-cAT`&wf~D zfoeV)BS%J+@+(DpjJ3CDS`0S=aEohpa$Vx{>!Tra0F+jJo2X_zD$d9G^^J~Ytub?t z%Kty}wFF?IfU<4|L#%oavDNHV>E!zl5}9Z_WAeDCJV4OKDrMTz1b9C z6&M%6i@h^oMJOoOX`p?>cW4Y%)ABpJE@9`<%UV7(GhuwOLWvo)VkNy!jR^9k1M>A$ zwfNr`&IOHFIgvs)c%5HHDky2;~4mwgcZki%m10glusuRwhx4s30f2;5PKvEQ9P!gv+ z9*N#>Vk43@M>H3oV z3d$8QdeWqJh@J!eD7~&Z)T5P~7q{x1NiELZSBY-(STb?ej*ObZyw-M8m0E){XdZ3t zd?xvZ zDe4%%PT|%6BcbyIL@Uy_9WsU&t0WM)zKa#p(sCOhJ*1`ly3#)*O~#P~;#bz7WH@f5 zo|V#_-L0WK*?!?2QKZir`TzGI6+uc)z@?per|=T+ydT{>!GLsT9#s`PFpc}zI{Ni8 z(+--BnOnpmPC-$xCK_ou83LW;0r2!;HvK25Hinwwbze*0Nwx$+bZPRj&donPDhY!) zsB^X9YNK{fg$#GKx70_rVkboBj@`av8eTJXUo$n}Kqbfjk0p}I(f3gKFod92fO}f@ zH*gEw6*}P-67<_a`8pC05zi0DL-)C%M*y%1b+K*+?{yK*moZ`hVH zE-0~qhe_$9ruR*@x0u^|Q+-_U)6pDvX>*pn^}XtTT$7$`gbLuUqT4BKCpoS{R`S&| zcU(Rkk(|OcuH7bE*1cnBiYv>hV%0b1pon8vl^^hVOo{#W7A>(vrQ=%-3x=zG-!jj} z64kqk0Yqi1BFb_N4^cVR)x%ouR{+JCR9p9+G_ZUbPVI^tQN*o`$+Gn}3&u~QHgJ8E zha1|OrSOwX>r)2@|$y+-UGoO|fwYCf4Q2J;^cD>$Ne8N8{vk+V8mW zi=RbQW)D_|{~25TM*gy82FGiHK%=h3!^#g>#}wbTo|Asc_pncMD|(l6{WVqH`(dg* zr{%;FPXkWY6j7-Tm0@lP6(^#xIAWDq0^&N@|5-qtG5rTP+LoG<=>EAn%9E1w+@xfbk9gQ#Dmxx z@)V7{pF6fX+RHd^X_mTcvo~*a@P#U;thGCc(P>J@AmYgoo{B7c)m4Jikc+% zA<|l|6T{bzwio=}tdG-Gp`eU{9FBFKMCYv*7`lZD@E_rgdf%5H_DwE_4~)w%F5+`W zR^F}_d|4x4U|q1EAKn}t>8>bQdiK!si6}dQW~tza%o=i_ zETSQ}|3tfaLvW9|ggB?F#qaGF7EY(aCnLcfmkaveL`C>HOIY1q71fW9u4$t5=Ph#$ zS$?FViBkT%O+5CZ?}ma3v!H^De#)^!fig`L`?6Ce#yH(8EvmttA(?6MGW{>FYi4qp zOYHW1Y$3g8%T49B#M?yW!I}_#RfVPKOZ1wL@zY{p}#i5()~&z=y|c6y>`=U&3cDy11K^V+TLjoKUCnA3KjTQpYG z)kLXDuhZRVGZ@zxV<_uXi9gY5-fnTtDM$G!*2d{A7VLFRw!xF!?A}9nt3Q#13BS9t z3|68B)4({8=p0glo*OZD_4*0)CUI3aqOxIS_S7@k+rO)2Sn>xda;BAQQ*Qd#{QlEUQ2Q63>w8iY@IWRD}n!$KIDCpCwi&1Sxh~ZXT4jmPuD^4lTx| zD}Kf4Y9eko?I><;8jU!xzM0}5hzhBzue9+V1vw` zs3;2Rphf=>FbbiQw?wt$9dDl@j%d8kB#@5ztb5zI?Vc-(^k$O55^Ua=7X2%IGNU8c ziEgs~*`apUCk;csl7wseDNDq1@oNcrFtxV03GAiB7=3f?fJ&irXxSe|S@~Pzof10V z`C51obGam~mf={F!;(F_Y}9IlEKj(#-FB1H40e3*u}aQHbemb^3v`y_HS6p%r(X4S zH^@CoR8!+_l2Lz9 zagO^|jF(U4tlp-nnEyA)QB1#agz_?FGVf@s0fGJe#osoRb%e+L+BKpxu zIgRz2Qiz^FpRdkH-LS#y>hT+bJD+SHe(D~bqPf&|J8wfZPia4T%-}$26Xk_Q(&&z? zKDIzfPLp_D%M+}hPWzoo(|*+#ksq@rDekPFnMCU0?#gpnI)zrFuM0zqaK+7?qwb!& zTnVE_uGR*Yn{Vds@Z50xL+F9P50IRHa__5BL#<0Y;C*HcRc+djw!h$pEpv~&)Q`S& zN3Qm~q#6(YlJs%I#6sa3@-eX9Oye!diRKb}1~#Yysp|vR zWQPtq{7qEGIAK{M7}8mw^Q$I^R3LiRc1PJ^D(%ihVt5vFGc`G;LQSD!=lM>_`(rNk8aOua>@h}E>Zi55;C%E-Fw!ddc*7wdoh_Hn#|bt- zF858wESIaCv85bgzj?@9_L8MuMCE{ZiXwS!Cm~8W<;{*5O`o+s87CR!;^kAKOvBR6?<){mi3 zQ2pW6ezZ|PpOCMv<$F@a3MXsBDvNk?35@}CkxeyuiCBxbFIg$%P?4kb?uw60Ox%P+ zD*ONRIipXyP;phDc_nxx>0;|j43~+jDc2W*Z@eu2#j;OpS#9DKMm9f;vgtmqU4M8# z#c`yw{bp3e@rJ4l8*yVlN5t)k5=7mx8}09vpSph9?=vK~UBKeIB+3I9VWs)ye;|oB zh{}0dyFJSk89U05R*Jv1>lDC#9jE)ax)a&Hf;YA=B_!V<;#aT4_|*dZw=9IYrD!d< z)|hx{X$=lmfTmP&tTh)$U0MJ5_bmT!&oA`a5?f)pCK~)x4Z5#<*LDxiGrB}>)3vz& z;(%Lv-cSa23hDH^$~QD zoF3#{tRE5FDB?jbp#443aZz)L*r4=)oKd0)=k{i^E2oyQ9?>6qd0n>Lp9LG$k!*c1 zBappdd?HXcBwAz(=cJuOC=YA9`n3Xw+(3cW=?is?lK{ip5E9(<^dJ0goKl zzo_@*nOLRnEkA5L*i5n4_&H7y!?&Ji zAAA zyJKge$a1q4yIBQ4PUvuI2h})qU7zL9&p0D@c@8}-&l>*^V8}-dc*FR~jDP%5^9g;T z%z`J54ap!fZ|PK~u&XEOkF1GmB*a{Is38XOZa2!(0gp4Ao#@MDbMbzapIuvT*+XE) zv04kcDHGen3c$NNslJoYkvkpl3|!pS{uMM~x?j(FSNn@R3U7xu!t4u4dXsKoj6HFs zKG}JiiT3-d$dEQLIs3nN@a8;2Iy6nv3TPQLcRFV;O``w<00<)VtbT zFhkzv2iz`a(-B&XZF`aL@cc0+E$UI`dDVI%{9FUTPwi6wqq7yXD6(N0Ori^YzTf?E zQ;}&;KRPJNkOwhNR}xH@XnGbAb{ZLZ(4mq8=^2r|OS>X{BbeLn)!k8hj=%73-MC;(8& zdxus>(`^j!0j^`H@rjX4Th2G_{gZ(SDC(vfQNqF7%G7gum-23qrL9AX3??{=zKqkO z@+@CA2MWa{|W$z4t;7V=5;7IubddkEQuG$|eX}}@!oq_J#7mleyD2#4{ z%PQKaU~Bh-!R`P0h7#EB{6f$XjHSn!P!uP^%w>Ws^d8 zcI&&AAXM*!H^|&A5%kpUkOqixAULwp%y|&Zl@GxN*OUrZAuz6zKjDHM)Qf%WvUf6= z9kl5pJoNehT3sS#JBBK)N?_v*M~pjw_$z!tqbi($a!pRyb$lvWC{C8o`a}!bXGn!J zrHitDb!>@7rkw|;)#g20cv)jhFuv%ii1t2nUn9;*2t{OG$e=qwg^X*K+pi{KtfvxP z_6w?I$9a}E*8%2--soz5$V4uwq9YCh2vVLz+?^4!bQ(%a?G$31IH)ATS&V&3QQ{;a zf(?~OeROdm!1jivP1|1H?B=7Kt_0xr{KgjoV4iv76IBHtWym!*Guw@d_j{AJm9Cbp ze@Qeynz~14ppj3mD6}?06Op=yA~#A7c$R^cH8FpoM;-YF8RGN#gKqSackxD+V|v7< zyuiY~9|H)KybaF!7o3(u3bo!$NNp6=q&o_m<>IOXsOih*aB&!aWuM%-P1lHY8{%jG z8sgaYeiyET`&}!IdEP!XJ5+wblm%BP`a8(9fl6@DAewhi3;@SJsypKLXmEHwqCP5O z;XIsaZW&zEya(-Sn3MeVHmS6HKWF}?{Fe90UuzP|LMrPgODc*;!q)awQB9t*hMg1f z^s+7DS_n*yyv#s*LdK7fxa@cX36UfdH}sj=bA!xE>&-0>5GG0e=uU)hcWS|ZJLZo8 zu36-+A#*GATi*zoVO-m-1BfTClB8RR;H(?kW$t|q=k3FmM!nJ;(KBCKoZ*5?vKJ;a zfOott+^moX`j04V<1A?RH9XHXhI+!nhj?<}tBUnq0gRuujrh%6QQ2rjA6%1MWpRmY z?yb!7A+-)c0bZuAt)<i1B%QlYbpRzEX7WqAsj$Z!;#X#z`)b! z>EaktG3V{ggPhEcJS>iD3;$`J_LSNCU^SP+ne7*E&Xi?fXgKiv8&K;5TNVxmh6#c| zGacL-fC7??ObiSuR1egkAdMsc#Q+l?j8n41_mQ076yhB90Cjs z3d*B`qX9CA62qCBGxyp8^Fal>{AltV&99?n)o3|AT1Smm+M^AY(b{mdHY8jderBF; X&b2mt>E!@mhl0V=)z4*}Q$iB}l!?6L literal 0 HcmV?d00001 diff --git a/shell/platform/embedder/fixtures/main.dart b/shell/platform/embedder/fixtures/main.dart index 35194f5fdcbb5..dffa430fbb520 100644 --- a/shell/platform/embedder/fixtures/main.dart +++ b/shell/platform/embedder/fixtures/main.dart @@ -1364,3 +1364,21 @@ void render_gradient_retained() { }; PlatformDispatcher.instance.scheduleFrame(); } + +@pragma('vm:entry-point') +void render_impeller_gl_test() { + PlatformDispatcher.instance.onBeginFrame = (Duration duration) { + final SceneBuilder builder = SceneBuilder(); + builder.pushOffset(0.0, 0.0); + final Paint paint = Paint(); + paint.color = Color.fromARGB(255, 0, 0, 255); + final PictureRecorder baseRecorder = PictureRecorder(); + final Canvas canvas = Canvas(baseRecorder); + canvas.drawPaint(Paint()..color = Color.fromARGB(255, 255, 0, 0)); + canvas.drawRect(Rect.fromLTRB(20.0, 20.0, 200.0, 150.0), paint); + builder.addPicture(Offset.zero, baseRecorder.endRecording()); + builder.pop(); + PlatformDispatcher.instance.views.first.render(builder.build()); + }; + PlatformDispatcher.instance.scheduleFrame(); +} diff --git a/shell/platform/embedder/tests/embedder_gl_unittests.cc b/shell/platform/embedder/tests/embedder_gl_unittests.cc index a050e70f8f2f0..f62985df3592d 100644 --- a/shell/platform/embedder/tests/embedder_gl_unittests.cc +++ b/shell/platform/embedder/tests/embedder_gl_unittests.cc @@ -4711,7 +4711,7 @@ TEST_F(EmbedderTest, CanRenderWithImpellerOpenGL) { }); builder.AddCommandLineArgument("--enable-impeller"); - builder.SetDartEntrypoint("render_gradient"); + builder.SetDartEntrypoint("render_impeller_gl_test"); builder.SetOpenGLRendererConfig(SkISize::Make(800, 600)); builder.SetCompositor(); builder.SetRenderTargetType( @@ -4733,7 +4733,7 @@ TEST_F(EmbedderTest, CanRenderWithImpellerOpenGL) { ASSERT_TRUE(ImageMatchesFixture( FixtureNameForBackend(EmbedderTestContextType::kOpenGLContext, - "impeller_gl_gradient.png"), + "impeller_gl_test.png"), rendered_scene)); // The scene will be rendered by the compositor, and the surface present