From 841cc675b314bcaf388920391b1deb352a76e2e8 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Fri, 20 Oct 2023 13:23:25 -0700 Subject: [PATCH] [Impeller] add OpenGL GPU tracing to devicelab tests. (#136974) Adds the metadata key required to enable OpenGLES GPU tracing. This is off by default because the API crashes on some GPU models, but it should be safe on the Pixel 7 (others TBD based on testing results). --- dev/devicelab/lib/tasks/perf_tests.dart | 43 ++++++++++++++----------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart index 210c82b62f25..ba146880d4c3 100644 --- a/dev/devicelab/lib/tasks/perf_tests.dart +++ b/dev/devicelab/lib/tasks/perf_tests.dart @@ -772,6 +772,9 @@ Map _average(List> results, int iterations /// +/// void _addOpenGLESToManifest(String testDirectory) { final String manifestPath = path.join( testDirectory, 'android', 'app', 'src', 'main', 'AndroidManifest.xml'); @@ -783,30 +786,34 @@ void _addOpenGLESToManifest(String testDirectory) { final String xmlStr = file.readAsStringSync(); final XmlDocument xmlDoc = XmlDocument.parse(xmlStr); - const String key = 'io.flutter.embedding.android.ImpellerBackend'; - const String value = 'opengles'; + final List<(String, String)> keyPairs = <(String, String)>[ + ('io.flutter.embedding.android.ImpellerBackend', 'opengles'), + ('io.flutter.embedding.android.EnableOpenGLGPUTracing', 'true') + ]; final XmlElement applicationNode = xmlDoc.findAllElements('application').first; // Check if the meta-data node already exists. - final Iterable existingMetaData = applicationNode - .findAllElements('meta-data') - .where((XmlElement node) => node.getAttribute('android:name') == key); - - if (existingMetaData.isNotEmpty) { - final XmlElement existingEntry = existingMetaData.first; - existingEntry.setAttribute('android:value', value); - } else { - final XmlElement metaData = XmlElement( - XmlName('meta-data'), - [ - XmlAttribute(XmlName('android:name'), key), - XmlAttribute(XmlName('android:value'), value) - ], - ); + for (final (String key, String value) in keyPairs) { + final Iterable existingMetaData = applicationNode + .findAllElements('meta-data') + .where((XmlElement node) => node.getAttribute('android:name') == key); + + if (existingMetaData.isNotEmpty) { + final XmlElement existingEntry = existingMetaData.first; + existingEntry.setAttribute('android:value', value); + } else { + final XmlElement metaData = XmlElement( + XmlName('meta-data'), + [ + XmlAttribute(XmlName('android:name'), key), + XmlAttribute(XmlName('android:value'), value) + ], + ); - applicationNode.children.add(metaData); + applicationNode.children.add(metaData); + } } file.writeAsStringSync(xmlDoc.toXmlString(pretty: true, indent: ' '));