Repository: flutter
Issue: [Platform view] Virtual Display renders too dark on some Android phones
Labels: e: device-specific,a: platform-views,P3,platform-views: vd,e: samsung,team-android,triaged-android

## Description
This is a very specific one.
I got a report of an widget showing up too dark. This relates to a Unity widget created using the `flutter_unity_widget` package. 
By default this widget uses an AndroidView, which falls back to VirtualDisplay mode because of a SurfaceView.

I can replicate the issue using Virtual Display, but only on a single similar device.   
It isn't a GPU issue as Hybrid Composition and native Untiy do show the colors as expected.

So far it seems limited to Samsung S20/S23 devices on Android 13+, but my sample size isn't big enough.

## Bug Compatibility
All devices besides the S23 were personally tested.
| Device | Android version | Correct VD color |
|--------------|-----------|---------|
| Pixel 4a emulator x86 | 14 | ✔ |
| Samsung Galaxy S23 Ultra | 14|❌|
| Samsung Galaxy S23 (reported)| 13 |❌|
| Samsung Galaxy S20Fe | 13 | ❌|
| Samsung Galaxy xCover4 | 13 | ✔ |
| Pixel 4 emulator x86 | 13 | ✔ |
| Nokia 8.1| 11 | ✔|
| Samsung Galaxy S8 | 9| ✔ |  
| Wileyfox Swift | 7.2.1|  ✔ |
| Samsung Galaxy J5 | 6|  ✔ |

Different Flutter versions don't seem to make any difference (3.7, 3.13, 3.16, etc)
I have an old apk that was made with 2.10.5 that doesn't seem dark, but I can now still reproduce this when switching to 2.10.5

**[Update]** Added S23 Ultra

## Code sample
A reproduction project can be found in this repo https://github.com/timbotimbo/flutter_fuw_reproduction_android.
The Unity export located in `android/unityLibrary` adds roughly ~106MB to the regular Flutter project.
Unity was exported and tested on windows, but should work on other platforms.

You can switch between Virtual display and Hybrid composition using the `useAndroidViewSurface` parameter in `main.dart`.
```dart
UnityWidget(
    // PlatformView mode: false -> Virtual Display, true -> Hybrid composition
    useAndroidViewSurface: false, 
    onUnityCreated: (controller) => {},
),
```

The [flutter_embed_unity branch](https://github.com/timbotimbo/flutter_fuw_reproduction_android/tree/flutter_embed_unity) uses an alternative Unity embedding plugin.
This one is newer, but does not have an option to switch to HC.

You can use this second branch as a comparion to exlcude plugin specific code.

## Steps to reproduce

I recommend to reproduce this on a real Android device.
Unity doesn't officially support (x86/x64) emulators and you might get unexpected results.
- On a desktop using AMD Ryzen, the x86 emulator only shows a purple screen and a warning.
- On a laptop using Intel i7, the x86 emulator shows Unity as expected.
- On a Mac mini m1, the ARM64 emulator shows Unity as expected.

Steps:
1.  Download or clone the repo linked under **code sample**
3.  Run the flutter application on Android.
4.  Click the 'Toggle' button to make Unity show up.
5.  You should see a rotating cube.
6.  Switch between `useAndroidViewSurface` true and false in the main.dart file.

## Expected result
The Unity widget shows up in the same color for both Virtual Display and Hybrid composition. Both should match the look of a native Unity app. 
(Most tested devices fit this expected result)

## Actual result
On some (Samsung?) devices the Virtual Display view shows up as if there is a dark overlay on top.
Based on the screenshots, the 'darkening' is more sever on the S20FE than the S23 Ultra.

## Screenhots or Video

Samsung S20FE.
Native Unity vs Flutter VD vs Flutter HC

![S20FE](https://github.com/flutter/flutter/assets/11444698/9146e423-0246-4274-8684-0c0ed31a63f9)

**[Update]** 

Samsung S23 Ultra 

Hybrid composition vs Virtual Display.

![S23Ultra](https://github.com/flutter/flutter/assets/11444698/c5da3aee-19eb-4b7e-851c-66e3a7ee089f)


## Logs
<details>
<summary>Flutter 3.16.5, Galaxy S20FE</summary>

```
Launching lib\main.dart on SM G780G in debug mode...
√  Built build\app\outputs\flutter-apk\app-debug.apk.
Connecting to VM Service at ws://127.0.0.1:63572/fqmAw8B4Rvc=/ws
I/BLASTBufferQueue(17761): [SurfaceView[com.example.example/com.example.example.MainActivity]@0#1](f:0,a:0) onFrameAvailable the first frame is available
D/SurfaceView@630cbb7(17761):  setAlpha: mUseAlpha = false alpha=1.0
D/SurfaceView@630cbb7(17761):  updateSurfaceAlpha: setUseAlpha() is not called, ignored.
I/ViewRootImpl@cab12cb[MainActivity](17761): Setup new sync id=0
I/ViewRootImpl@cab12cb[MainActivity](17761): Setting syncFrameCallback
I/ViewRootImpl@cab12cb[MainActivity](17761): registerCallbacksForSync syncBuffer=false
D/SurfaceView@630cbb7(17761): updateSurfacePosition RenderWorker, frameNr = 1, position = [0, 0, 1080, 2256] surfaceSize = 1080x2256
I/SurfaceView@630cbb7(17761): uSP: rtp = Rect(0, 0 - 1080, 2256) rtsw = 1080 rtsh = 2256
I/ViewRootImpl@cab12cb[MainActivity](17761): mWNT: t=0xb4000078dea09900 mBlastBufferQueue=0xb40000796454b900 fn= 1 caller= android.view.ViewRootImpl.lambda$applyTransactionOnDraw$11$android-view-ViewRootImpl:12865 android.view.ViewRootImpl$$ExternalSyntheticLambda1.onFrameDraw:4 android.graphics.HardwareRenderer$FrameDrawingCallback.onFrameDraw:924
I/SurfaceView@630cbb7(17761): onSSPAndSRT: pl = 0 pt = 0 sx = 1.0 sy = 1.0
I/ViewRootImpl@cab12cb[MainActivity](17761): Received frameDrawingCallback syncResult=0 frameNum=1.
I/ViewRootImpl@cab12cb[MainActivity](17761): Setting up sync and frameCommitCallback
I/SurfaceView@630cbb7(17761): aOrMT: ViewRootImpl@cab12cb[MainActivity] t = android.view.SurfaceControl$Transaction@7d86520 fN = 1 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1537 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:373
I/ViewRootImpl@cab12cb[MainActivity](17761): mWNT: t=0xb4000078dea09f00 mBlastBufferQueue=0xb40000796454b900 fn= 1 caller= android.view.SurfaceView.applyOrMergeTransaction:1455 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1537
I/BLASTBufferQueue(17761): [ViewRootImpl@cab12cb[MainActivity]#0](f:0,a:0) onFrameAvailable the first frame is available
I/ViewRootImpl@cab12cb[MainActivity](17761): Received frameCommittedCallback lastAttemptedDrawFrameNum=1 didProduceBuffer=true
D/OpenGLRenderer(17761): CFMS:: SetUp Pid : 17761    Tid : 17785
W/Parcel  (17761): Expecting binder but got null!
I/ViewRootImpl@cab12cb[MainActivity](17761): onSyncComplete
I/ViewRootImpl@cab12cb[MainActivity](17761): setupSync seqId=0 mSyncId=0 fn=1 caller=android.view.ViewRootImpl$$ExternalSyntheticLambda11.accept:6 android.window.SurfaceSyncer.lambda$setupSync$1$android-window-SurfaceSyncer:128 android.window.SurfaceSyncer$$ExternalSyntheticLambda1.accept:8 android.window.SurfaceSyncer$SyncSet.checkIfSyncIsComplete:382 android.window.SurfaceSyncer$SyncSet.markSyncReady:359 android.window.SurfaceSyncer.markSyncReady:151 android.view.ViewRootImpl.performTraversals:4503
I/ViewRootImpl@cab12cb[MainActivity](17761): reportDrawFinished seqId=0 mSyncId=-1 fn=1 mSurfaceChangedTransaction=0xb4000078dea09600
I/ViewRootImpl@cab12cb[MainActivity](17761): MSG_WINDOW_FOCUS_CHANGED 1 0
I/ViewRootImpl@cab12cb[MainActivity](17761): mThreadedRenderer.initializeIfNeeded()#2 mSurface={isValid=true 0xb4000078de82d000}
D/InputMethodManager(17761): startInputInner - Id : 0
I/InputMethodManager(17761): startInputInner - mService.startInputOrWindowGainedFocus
D/InputMethodManager(17761): startInputInner - Id : 0
D/InsetsController(17761): onStateChanged: InsetsState: {mDisplayFrame=Rect(0, 0 - 1080, 2400), mDisplayCutout=DisplayCutout{insets=Rect(0, 88 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(512, 0 - 568, 88), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=1080 displayHeight=2400 physicalDisplayWidth=1080 physicalDisplayHeight=2400 density={3.0} cutoutSpec={M 0,0 M 0,10.71963616907435 a 9.280363830925644,9.280363830925644 0 1,0 0,18.56072766185129 a 9.280363830925644,9.280363830925644 0 1,0 0,-18.56072766185129 Z @dp} rotation={0} scale={1.0} physicalPixelDisplaySizeRatio={1.0}}}}, mRoundedCorners=RoundedCorners{[RoundedCorner{position=TopLeft, radius=96, center=Point(96, 96)}, RoundedCorner{position=TopRight, radius=96, center=Point(984, 96)}, RoundedCorner{position=BottomRight, radius=96, center=Point(984, 2304)}, RoundedCorner{position=BottomLeft, radius=96, center=Point(96, 2304)}]}  mRoundedCornerFrame=Rect(0, 0 - 1080, 2400), mPrivacyIndicatorBounds=PrivacyIndicatorBounds {static bounds=Rect(948, 0 - 1080, 88) rotation=0}, mSources= { InsetsSource: {mType=ITYPE_STATUS_BAR, mFrame=[0,0][1080,88], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_NAVIGATION_BAR, mFrame=[0,2256][1080,2400], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_LEFT_GESTURES, mFrame=[0,0][0,2400], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_RIGHT_GESTURES, mFrame=[1080,0][1080,2400], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_TOP_MANDATORY_GESTURES, mFrame=[0,0][1080,124], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_BOTTOM_MANDATORY_GESTURES, mFrame=[0,2256][1080,2400], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_LEFT_DISPLAY_CUTOUT, mFrame=[0,0][-100000,2400], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_TOP_DISPLAY_CUTOUT, mFrame=[0,0][1080,88], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_RIGHT_DISPLAY_CUTOUT, mFrame=[100000,0][1080,2400], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_BOTTOM_DISPLAY_CUTOUT, mFrame=[0,100000][1080,2400], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_TOP_TAPPABLE_ELEMENT, mFrame=[0,0][1080,88], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_BOTTOM_TAPPABLE_ELEMENT, mFrame=[0,2256][1080,2400], mVisible=true, mInsetsRoundedCornerFrame=false}, InsetsSource: {mType=ITYPE_IME, mFrame=[0,0][0,0], mVisibleFrame=[0,1591][1080,2400], mVisible=false, mInsetsRoundedCornerFrame=false} } host=com.example.example/com.example.example.MainActivity from=android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl:6740
I/ViewRootImpl@cab12cb[MainActivity](17761): ViewPostIme pointer 0
I/ViewRootImpl@cab12cb[MainActivity](17761): ViewPostIme pointer 1
I/DecorView(17761): notifyKeepScreenOnChanged: keepScreenOn=false
I/DecorView(17761): notifyKeepScreenOnChanged: keepScreenOn=false
I/DecorView(17761): notifyKeepScreenOnChanged: keepScreenOn=false
D/FlutterUnityController(17761): Attaching unity to view
D/FlutterUnityController(17761): onCreate
D/FlutterUnityController(17761): onResume
I/PlatformViewsController(17761): Using hybrid composition for platform view: 0
I/ViewRootImpl@cab12cb[MainActivity](17761): performTraversals params={(0,0)(fillxfill) sim={adjust=resize} ty=BASE_APPLICATION wanim=0x1030001
I/ViewRootImpl@cab12cb[MainActivity](17761):   fl=81810900
I/ViewRootImpl@cab12cb[MainActivity](17761):   pfl=16020040
I/ViewRootImpl@cab12cb[MainActivity](17761):   vsysui=500
I/ViewRootImpl@cab12cb[MainActivity](17761):   bhv=DEFAULT
I/ViewRootImpl@cab12cb[MainActivity](17761):   fitSides= naviIconColor=0}
I/ViewRootImpl@cab12cb[MainActivity](17761): performTraversals mFirst=false windowShouldResize=false viewVisibilityChanged=false mForceNextWindowRelayout=false params={(0,0)(fillxfill) sim={adjust=resize} ty=BASE_APPLICATION fmt=TRANSLUCENT wanim=0x1030001
I/ViewRootImpl@cab12cb[MainActivity](17761):   fl=81810900
I/ViewRootImpl@cab12cb[MainActivity](17761):   pfl=16020040
I/ViewRootImpl@cab12cb[MainActivity](17761):   vsysui=500
I/ViewRootImpl@cab12cb[MainActivity](17761):   bhv=DEFAULT
I/ViewRootImpl@cab12cb[MainActivity](17761):   fitSides= naviIconColor=0}
I/ViewRootImpl@cab12cb[MainActivity](17761): updateBlastSurfaceIfNeeded mBlastBufferQueue=0xb40000796454b900 isSameSurfaceControl=true
I/BLASTBufferQueue(17761): update, w= 1080 h= 2400 mName = ViewRootImpl@cab12cb[MainActivity] mNativeObject= 0xb40000796454b900 sc.mNativeObject= 0xb4000078c0129aa0 format= -3 caller= android.view.ViewRootImpl.updateBlastSurfaceIfNeeded:2898 android.view.ViewRootImpl.relayoutWindow:9847 android.view.ViewRootImpl.performTraversals:3884 android.view.ViewRootImpl.doTraversal:3116 android.view.ViewRootImpl$TraversalRunnable.run:10885 android.view.Choreographer$CallbackRecord.run:1301
I/ViewRootImpl@cab12cb[MainActivity](17761): Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)0 dur=5 res=0x0 s={true 0xb4000078de82d000} ch=false seqId=0
I/ViewRootImpl@cab12cb[MainActivity](17761): updateBoundsLayer: t = android.view.SurfaceControl$Transaction@cf48777 sc = Surface(name=Bounds for - com.example.example/com.example.example.MainActivity@0)/@0x26e1fe4 frame = 3
I/ViewRootImpl@cab12cb[MainActivity](17761): mWNT: t=0xb4000078dea09700 mBlastBufferQueue=0xb40000796454b900 fn= 3 caller= android.view.ViewRootImpl.prepareSurfaces:2985 android.view.ViewRootImpl.performTraversals:4233 android.view.ViewRootImpl.doTraversal:3116
I/CustomUnityPlayer(17761): onAttachedToWindow
I/SurfaceView@cb9b838(17761): onWindowVisibilityChanged(0) true android.view.SurfaceView{cb9b838 VFE...... .F....I. 0,0-0,0 #7f05004c app:id/unitySurfaceView} of ViewRootImpl@cab12cb[MainActivity]
D/SurfaceView@cb9b838(17761): updateSurface: has no frame
[log] *********************************************
[log] ** flutter unity controller setup complete **
[log] *********************************************
D/SurfaceView@cb9b838(17761): updateSurface: has no frame
I/SurfaceView@cb9b838(17761): Changes: creating=true format=true size=true visible=true alpha=false hint=false mUseAlpha=false visible=true left=true top=true
I/BLASTBufferQueue(17761): update, w= 1080 h= 2000 mName = null mNativeObject= 0xb4000078dedd4e00 sc.mNativeObject= 0xb4000079462c2500 format= 4 caller= android.view.SurfaceView.createBlastSurfaceControls:1383 android.view.SurfaceView.updateSurface:1079 android.view.SurfaceView.lambda$new$0$android-view-SurfaceView:200 android.view.SurfaceView$$ExternalSyntheticLambda5.onPreDraw:2 android.view.ViewTreeObserver.dispatchOnPreDraw:1121 android.view.ViewRootImpl.performTraversals:4442
I/SurfaceView@cb9b838(17761): 213497912 Cur surface: Surface(name=null)/@0x4f33c4d
I/SurfaceView@cb9b838(17761): pST: sr = Rect(0, 256 - 1080, 2256) sw = 1080 sh = 2000
D/SurfaceView@cb9b838(17761): performSurfaceTransaction RenderWorker position = [0, 256, 1080, 2256] surfaceSize = 1080x2000
I/SurfaceView@cb9b838(17761): applyTransactionOnVriDraw: vri = ViewRootImpl@cab12cb[MainActivity] fRS = false t = 0xb40000795c3a5800 android.view.SurfaceView.performSurfaceTransaction:959 android.view.SurfaceView.updateSurface:1105 android.view.SurfaceView.lambda$new$0$android-view-SurfaceView:200
I/ViewRootImpl@cab12cb[MainActivity](17761): applyTransactionOnDraw: mRemoved = false isHardwareEnabled = true t = 0xb40000795c3a5800android.view.SurfaceView.applyTransactionOnVriDraw:2048 android.view.SurfaceView.performSurfaceTransaction:959 android.view.SurfaceView.updateSurface:1105 android.view.SurfaceView.lambda$new$0$android-view-SurfaceView:200 android.view.SurfaceView$$ExternalSyntheticLambda5.onPreDraw:2
I/SurfaceView@cb9b838(17761): updateSurface: mVisible = true mSurface.isValid() = true
I/SurfaceView@cb9b838(17761): updateSurface: mSurfaceCreated = false surfaceChanged = true visibleChanged = true
I/SurfaceView@cb9b838(17761): visibleChanged -- surfaceCreated
I/SurfaceView@cb9b838(17761): surfaceCreated 1 #8 android.view.SurfaceView{cb9b838 VFE...... ......ID 0,0-1080,2000 #7f05004c app:id/unitySurfaceView}
I/SurfaceView@cb9b838(17761): surfaceChanged -- format=4 w=1080 h=2000
I/SurfaceView@cb9b838(17761): surfaceChanged (1080,2000) 1 #8 android.view.SurfaceView{cb9b838 VFE...... ......ID 0,0-1080,2000 #7f05004c app:id/unitySurfaceView}
I/SurfaceView@cb9b838(17761): surfaceRedrawNeeded
V/SurfaceView@cb9b838(17761): Layout: x=0 y=256 w=1080 h=2000, frame=Rect(0, 0 - 1080, 2000)
D/SurfaceView@cb9b838(17761): updateSurfacePosition RenderWorker, frameNr = 4, position = [0, 256, 1080, 2256] surfaceSize = 1080x2000
I/SurfaceView@cb9b838(17761): uSP: rtp = Rect(0, 256 - 1080, 2256) rtsw = 1080 rtsh = 2000
I/SurfaceView@cb9b838(17761): onSSPAndSRT: pl = 0 pt = 256 sx = 1.0 sy = 1.0
I/SurfaceView@cb9b838(17761): aOrMT: ViewRootImpl@cab12cb[MainActivity] t = android.view.SurfaceControl$Transaction@8df5650 fN = 4 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1537 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:373
I/ViewRootImpl@cab12cb[MainActivity](17761): mWNT: t=0xb400007937172000 mBlastBufferQueue=0xb40000796454b900 fn= 4 caller= android.view.SurfaceView.applyOrMergeTransaction:1455 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1537
I/ViewRootImpl@cab12cb[MainActivity](17761): mWNT: t=0xb40000795c3a5800 mBlastBufferQueue=0xb40000796454b900 fn= 4 caller= android.view.ViewRootImpl.lambda$applyTransactionOnDraw$11$android-view-ViewRootImpl:12865 android.view.ViewRootImpl$$ExternalSyntheticLambda1.onFrameDraw:4 android.graphics.HardwareRenderer$FrameDrawingCallback.onFrameDraw:924
I/Unity   (17761): MemoryManager: Using 'Dynamic Heap' Allocator.
W/example.example(17761): Accessing hidden method Ljava/lang/invoke/MethodHandles$Lookup;-><init>(Ljava/lang/Class;I)V (unsupported, reflection, allowed)
D/InputMethodManager(17761): startInputInner - Id : 0
I/InputMethodManager(17761): startInputInner - mService.startInputOrWindowGainedFocus
I/SurfaceView@cb9b838(17761): finishedDrawing
I/DecorView(17761): notifyKeepScreenOnChanged: keepScreenOn=true
I/Unity   (17761): SystemInfo CPU = ARM64 FP ASIMD AES, Cores = 8, Memory = 5628mb
I/Unity   (17761): SystemInfo ARM big.LITTLE configuration: 4 big (mask: 0xf0), 4 little (mask: 0xf)
I/Unity   (17761): ApplicationInfo com.example.example version 1.0.0 build 8b16e944-1c06-4cc0-a34b-946c101cc623
I/Unity   (17761): Built from '2019.4/staging' branch, Version '2019.4.40f1 (ffc62b691db5)', Build type 'Release', Scripting Backend 'il2cpp', CPU 'arm64-v8a', Stripping 'Enabled'
I/ViewRootImpl@cab12cb[MainActivity](17761): performTraversals params={(0,0)(fillxfill) sim={adjust=resize} ty=BASE_APPLICATION wanim=0x1030001
I/ViewRootImpl@cab12cb[MainActivity](17761):   fl=81810980
I/ViewRootImpl@cab12cb[MainActivity](17761):   pfl=16020040
I/ViewRootImpl@cab12cb[MainActivity](17761):   vsysui=500
I/ViewRootImpl@cab12cb[MainActivity](17761):   bhv=DEFAULT
I/ViewRootImpl@cab12cb[MainActivity](17761):   fitSides= naviIconColor=0}
I/ViewRootImpl@cab12cb[MainActivity](17761): performTraversals mFirst=false windowShouldResize=false viewVisibilityChanged=false mForceNextWindowRelayout=false params={(0,0)(fillxfill) sim={adjust=resize} ty=BASE_APPLICATION fmt=TRANSLUCENT wanim=0x1030001
I/ViewRootImpl@cab12cb[MainActivity](17761):   fl=81810980
I/ViewRootImpl@cab12cb[MainActivity](17761):   pfl=16020040
I/ViewRootImpl@cab12cb[MainActivity](17761):   vsysui=500
I/ViewRootImpl@cab12cb[MainActivity](17761):   bhv=DEFAULT
I/ViewRootImpl@cab12cb[MainActivity](17761):   fitSides= naviIconColor=0}
I/ViewRootImpl@cab12cb[MainActivity](17761): updateBlastSurfaceIfNeeded mBlastBufferQueue=0xb40000796454b900 isSameSurfaceControl=true
I/BLASTBufferQueue(17761): update, w= 1080 h= 2400 mName = ViewRootImpl@cab12cb[MainActivity] mNativeObject= 0xb40000796454b900 sc.mNativeObject= 0xb4000078c0636580 format= -3 caller= android.view.ViewRootImpl.updateBlastSurfaceIfNeeded:2898 android.view.ViewRootImpl.relayoutWindow:9847 android.view.ViewRootImpl.performTraversals:3884 android.view.ViewRootImpl.doTraversal:3116 android.view.ViewRootImpl$TraversalRunnable.run:10885 android.view.Choreographer$CallbackRecord.run:1301
I/ViewRootImpl@cab12cb[MainActivity](17761): Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)0 dur=6 res=0x0 s={true 0xb4000078de82d000} ch=false seqId=0
I/ViewRootImpl@cab12cb[MainActivity](17761): updateBoundsLayer: t = android.view.SurfaceControl$Transaction@cf48777 sc = Surface(name=Bounds for - com.example.example/com.example.example.MainActivity@0)/@0x26e1fe4 frame = 8
I/ViewRootImpl@cab12cb[MainActivity](17761): mWNT: t=0xb4000078dea09700 mBlastBufferQueue=0xb40000796454b900 fn= 8 caller= android.view.ViewRootImpl.prepareSurfaces:2985 android.view.ViewRootImpl.performTraversals:4233 android.view.ViewRootImpl.doTraversal:3116
I/DecorView(17761): notifyKeepScreenOnChanged: keepScreenOn=true
I/ViewRootImpl@cab12cb[MainActivity](17761): performTraversals mFirst=false windowShouldResize=false viewVisibilityChanged=false mForceNextWindowRelayout=false params={(0,0)(fillxfill) sim={adjust=resize} ty=BASE_APPLICATION fmt=TRANSLUCENT wanim=0x1030001 sysuil=true
I/ViewRootImpl@cab12cb[MainActivity](17761):   fl=81810980
I/ViewRootImpl@cab12cb[MainActivity](17761):   pfl=16020040
I/ViewRootImpl@cab12cb[MainActivity](17761):   vsysui=400
I/ViewRootImpl@cab12cb[MainActivity](17761):   bhv=DEFAULT
I/ViewRootImpl@cab12cb[MainActivity](17761):   fitSides= naviIconColor=0}
I/ViewRootImpl@cab12cb[MainActivity](17761): updateBlastSurfaceIfNeeded mBlastBufferQueue=0xb40000796454b900 isSameSurfaceControl=true
I/BLASTBufferQueue(17761): update, w= 1080 h= 2400 mName = ViewRootImpl@cab12cb[MainActivity] mNativeObject= 0xb40000796454b900 sc.mNativeObject= 0xb4000078c0636940 format= -3 caller= android.view.ViewRootImpl.updateBlastSurfaceIfNeeded:2898 android.view.ViewRootImpl.relayoutWindow:9847 android.view.ViewRootImpl.performTraversals:3884 android.view.ViewRootImpl.doTraversal:3116 android.view.ViewRootImpl$TraversalRunnable.run:10885 android.view.Choreographer$CallbackRecord.run:1301
I/ViewRootImpl@cab12cb[MainActivity](17761): Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)0 dur=8 res=0x0 s={true 0xb4000078de82d000} ch=false seqId=0
D/Unity   (17761):  GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_half_float GL_OES_framebuffer_object GL_OES_rgb8_rgba8 GL_OES_compressed_ETC1_RGB8_texture GL_AMD_compressed_ATC_texture GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_OES_texture_compression_astc GL_OES_texture_npot GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_read_format_bgra GL_OES_texture_3D GL_EXT_color_buffer_float GL_EXT_color_buffer_half_float GL_QCOM_alpha_test GL_OES_depth24 GL_OES_packed_depth_stencil GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_EXT_sRGB GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_EXT_texture_type_2_10_10_10_REV GL_EXT_texture_sRGB_decode GL_EXT_texture_format_sRGB_override GL_OES_element_index_uint GL_EXT_copy_image GL_EXT_geometry_shader GL_EXT_tessellation_shader GL_OES_texture_stencil8 GL_EXT_shader_io_blocks GL_OES_shader_image_atomic GL_OES_sample_variables GL_EXT_texture_b
D/Unity   (17761): order_clamp GL_EXT_EGL_image_external_wrap_modes GL_EXT_multisampled_render_to_texture GL_EXT_multisampled_render_to_texture2 GL_OES_shader_multisample_interpolation GL_EXT_texture_cube_map_array GL_EXT_draw_buffers_indexed GL_EXT_gpu_shader5 GL_EXT_robustness GL_EXT_texture_buffer GL_EXT_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_OES_texture_storage_multisample_2d_array GL_OES_sample_shading GL_OES_get_program_binary GL_EXT_debug_label GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_QCOM_tiled_rendering GL_ANDROID_extension_pack_es31a GL_EXT_primitive_bounding_box GL_OES_standard_derivatives GL_OES_vertex_array_object GL_EXT_disjoint_timer_query GL_KHR_debug GL_EXT_YUV_target GL_EXT_sRGB_write_control GL_EXT_texture_norm16 GL_EXT_discard_framebuffer GL_OES_surfaceless_context GL_OVR_multiview GL_OVR_multiview2 GL_EXT_texture_sRGB_R8 GL_KHR_no_error GL_EXT_debug_marker GL_OES_EGL_image_external_essl3 GL_OVR_multiview_multisampled_render_to_texture GL_E
D/Unity   (17761): XT_buffer_storage GL_EXT_external_buffer GL_EXT_blit_framebuffer_params GL_EXT_clip_cull_distance GL_EXT_protected_textures GL_EXT_shader_non_constant_global_initializers GL_QCOM_texture_foveated GL_QCOM_texture_foveated_subsampled_layout GL_QCOM_shader_framebuffer_fetch_noncoherent GL_QCOM_shader_framebuffer_fetch_rate GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_EGL_image_array GL_NV_shader_noperspective_interpolation GL_KHR_robust_buffer_access_behavior GL_EXT_EGL_image_storage GL_EXT_blend_func_extended GL_EXT_clip_control GL_OES_texture_view GL_EXT_fragment_invocation_density GL_QCOM_motion_estimation GL_QCOM_validate_shader_binary GL_QCOM_YUV_texture_gather
D/InputTransport(17761): Input channel destroyed: 'ClientS', fd=163
D/example.example(17761): PlayerBase::PlayerBase()
D/example.example(17761): TrackPlayerBase::TrackPlayerBase()
I/libOpenSLES(17761): Emulating old channel mask behavior (ignoring positional mask 0x3, using default mask 0x3 based on channel count of 2)
W/AudioTrack(17761): set(): notificationFrames=-21 clamped to the range -1 to -8
I/AudioTrack(17761): createTrack_l(0): AUDIO_OUTPUT_FLAG_FAST successful; frameCount 0 -> 1536
V/MediaRouter(17761): Selecting route: RouteInfo{ name=Phone, description=null, status=null, category=RouteCategory{ name=System types=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO  groupable=false }, supportedTypes=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO , presentationDisplay=null }
I/MediaRouter(17761): Skip setBluetoothA2dpOn(): types=8388615, isPlaybackActive()=true, BT route=null
I/BLASTBufferQueue(17761): [SurfaceView[com.example.example/com.example.example.MainActivity]@0#2](f:0,a:0) onFrameAvailable the first frame is available
I/DecorView(17761): notifyKeepScreenOnChanged: keepScreenOn=false
I/ViewRootImpl@cab12cb[MainActivity](17761): performTraversals params={(0,0)(fillxfill) sim={adjust=resize} layoutInDisplayCutoutMode=shortEdges ty=BASE_APPLICATION wanim=0x1030001
I/ViewRootImpl@cab12cb[MainActivity](17761):   fl=81810900
I/ViewRootImpl@cab12cb[MainActivity](17761):   pfl=16020040
I/ViewRootImpl@cab12cb[MainActivity](17761):   vsysui=400
I/ViewRootImpl@cab12cb[MainActivity](17761):   bhv=DEFAULT
I/ViewRootImpl@cab12cb[MainActivity](17761):   fitSides= naviIconColor=0}
I/ViewRootImpl@cab12cb[MainActivity](17761): performTraversals mFirst=false windowShouldResize=false viewVisibilityChanged=false mForceNextWindowRelayout=false params={(0,0)(fillxfill) sim={adjust=resize} layoutInDisplayCutoutMode=shortEdges ty=BASE_APPLICATION fmt=TRANSLUCENT wanim=0x1030001
I/ViewRootImpl@cab12cb[MainActivity](17761):   fl=81810900
I/ViewRootImpl@cab12cb[MainActivity](17761):   pfl=16020040
I/ViewRootImpl@cab12cb[MainActivity](17761):   vsysui=400
I/ViewRootImpl@cab12cb[MainActivity](17761):   bhv=DEFAULT
I/ViewRootImpl@cab12cb[MainActivity](17761):   fitSides= naviIconColor=0}
D/CompatibilityChangeReporter(17761): Compat change id reported: 147600208; UID 11494; state: ENABLED
I/ViewRootImpl@cab12cb[MainActivity](17761): updateBlastSurfaceIfNeeded mBlastBufferQueue=0xb40000796454b900 isSameSurfaceControl=true
I/BLASTBufferQueue(17761): update, w= 1080 h= 2400 mName = ViewRootImpl@cab12cb[MainActivity] mNativeObject= 0xb40000796454b900 sc.mNativeObject= 0xb4000078c0232f40 format= -3 caller= android.view.ViewRootImpl.updateBlastSurfaceIfNeeded:2898 android.view.ViewRootImpl.relayoutWindow:9847 android.view.ViewRootImpl.performTraversals:3884 android.view.ViewRootImpl.doTraversal:3116 android.view.ViewRootImpl$TraversalRunnable.run:10885 android.view.Choreographer$CallbackRecord.run:1301
I/ViewRootImpl@cab12cb[MainActivity](17761): Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)0 dur=8 res=0x0 s={true 0xb4000078de82d000} ch=false seqId=0
I/ViewRootImpl@cab12cb[MainActivity](17761): updateBoundsLayer: t = android.view.SurfaceControl$Transaction@cf48777 sc = Surface(name=Bounds for - com.example.example/com.example.example.MainActivity@0)/@0x26e1fe4 frame = 50
I/ViewRootImpl@cab12cb[MainActivity](17761): mWNT: t=0xb4000078dea09700 mBlastBufferQueue=0xb40000796454b900 fn= 50 caller= android.view.ViewRootImpl.prepareSurfaces:2985 android.view.ViewRootImpl.performTraversals:4233 android.view.ViewRootImpl.doTraversal:3116

```
</details>


## Flutter Doctor output
<details> 
<summary> flutter doctor on 3.16.5 </summary>

```
[√] Flutter (Channel stable, 3.16.5, on Microsoft Windows [Version 10.0.19045.3803], locale en-NL)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop Windows apps (Visual Studio Community 2019 16.11.21)
[!] Android Studio (version 2022.2)
    X Unable to determine bundled Java version.
[√] Android Studio (version 2022.3)
[√] VS Code (version 1.85.1)
[√] Connected device (3 available)
[√] Network resources

! Doctor found issues in 1 category.
```
</details>