From 3a9f223dd1fe6a74e6bcf9a1080280034043409c Mon Sep 17 00:00:00 2001 From: Lingfeng Yang Date: Wed, 24 Jan 2018 10:40:18 -0800 Subject: Don't use shader disk cache on emulator bug: 71900691 Emulator user might switch renderers, migrate a snapshot to a different machine with a different shader binary format, etc. Plus, program binaries don't seem to work so well on some desktop GPUs. Change-Id: I0c6239acbd556097494aa903d6603c963d3141cb --- libs/hwui/Properties.cpp | 4 ++++ libs/hwui/Properties.h | 7 +++++++ libs/hwui/pipeline/skia/ShaderCache.cpp | 7 ++++++- 3 files changed, 17 insertions(+), 1 deletion(-) (limited to 'libs') diff --git a/libs/hwui/Properties.cpp b/libs/hwui/Properties.cpp index 4243e7eeef8c..6cd283a9063c 100644 --- a/libs/hwui/Properties.cpp +++ b/libs/hwui/Properties.cpp @@ -61,6 +61,8 @@ bool Properties::disableVsync = false; bool Properties::skpCaptureEnabled = false; bool Properties::enableRTAnimations = true; +bool Properties::runningInEmulator = false; + static int property_get_int(const char* key, int defaultValue) { char buf[PROPERTY_VALUE_MAX] = { '\0', @@ -135,6 +137,8 @@ bool Properties::load() { skpCaptureEnabled = property_get_bool("ro.debuggable", false) && property_get_bool(PROPERTY_CAPTURE_SKP_ENABLED, false); + runningInEmulator = property_get_bool(PROPERTY_QEMU_KERNEL, false); + return (prevDebugLayersUpdates != debugLayersUpdates) || (prevDebugOverdraw != debugOverdraw) || (prevDebugStencilClip != debugStencilClip); } diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h index af4b694fe86a..179b97bf6d9f 100644 --- a/libs/hwui/Properties.h +++ b/libs/hwui/Properties.h @@ -180,6 +180,11 @@ enum DebugLevel { */ #define PROPERTY_CAPTURE_SKP_FILENAME "debug.hwui.skp_filename" +/** + * Property for whether this is running in the emulator. + */ +#define PROPERTY_QEMU_KERNEL "ro.kernel.qemu" + /////////////////////////////////////////////////////////////////////////////// // Misc /////////////////////////////////////////////////////////////////////////////// @@ -261,6 +266,8 @@ public: // Used for testing only to change the render pipeline. static void overrideRenderPipelineType(RenderPipelineType); + static bool runningInEmulator; + private: static ProfileType sProfileType; static bool sDisableProfileBars; diff --git a/libs/hwui/pipeline/skia/ShaderCache.cpp b/libs/hwui/pipeline/skia/ShaderCache.cpp index c7a30141803d..2fa56f613144 100644 --- a/libs/hwui/pipeline/skia/ShaderCache.cpp +++ b/libs/hwui/pipeline/skia/ShaderCache.cpp @@ -19,6 +19,7 @@ #include #include #include "FileBlobCache.h" +#include "Properties.h" #include "utils/TraceUtils.h" namespace android { @@ -43,7 +44,11 @@ ShaderCache& ShaderCache::get() { void ShaderCache::initShaderDiskCache() { ATRACE_NAME("initShaderDiskCache"); std::lock_guard lock(mMutex); - if (mFilename.length() > 0) { + + // Emulators can switch between different renders either as part of config + // or snapshot migration. Also, program binaries may not work well on some + // desktop / laptop GPUs. Thus, disable the shader disk cache for emulator builds. + if (!Properties::runningInEmulator && mFilename.length() > 0) { mBlobCache.reset(new FileBlobCache(maxKeySize, maxValueSize, maxTotalSize, mFilename)); mInitialized = true; } -- cgit v1.2.3-59-g8ed1b