|
@@ -0,0 +1,70 @@
|
|
|
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
+From: Le Hoang Quyen <[email protected]>
|
|
|
+Date: Tue, 31 Oct 2023 08:52:25 +0000
|
|
|
+Subject: Crash GPU process and clear shader cache when skia reports
|
|
|
+ compileError.
|
|
|
+
|
|
|
+Sometimes Skia failed to compile the cached GLSL because the driver had
|
|
|
+been changed but GL_RENDERER was still the same. In this case, we better
|
|
|
+crash the GPU process and signal the browser to clear the cache & let
|
|
|
+Skia regenerate the GLSL in the next run.
|
|
|
+
|
|
|
+Even if the compile failure wasn't caused by the cached GLSL. It's still
|
|
|
+better to crash the GPU process and let the shaders be re-generated.
|
|
|
+Because a failed compilation would have resulted in wrong rendering
|
|
|
+even if we had allowed the process to continue its execution.
|
|
|
+
|
|
|
+Bug: 1442633
|
|
|
+Change-Id: Ia0e36bd4674877de5be451a6ea9c4e7fa5e34e8e
|
|
|
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4988290
|
|
|
+Reviewed-by: Sunny Sachanandani <[email protected]>
|
|
|
+Commit-Queue: Quyen Le <[email protected]>
|
|
|
+Cr-Commit-Position: refs/heads/main@{#1217461}
|
|
|
+
|
|
|
+diff --git a/gpu/command_buffer/service/shared_context_state.cc b/gpu/command_buffer/service/shared_context_state.cc
|
|
|
+index 63f6c33ad5f41cde0fca08d60e7e10fe1154e165..f422ec52ca74f5a636e11591ba42444773a5c682 100644
|
|
|
+--- a/gpu/command_buffer/service/shared_context_state.cc
|
|
|
++++ b/gpu/command_buffer/service/shared_context_state.cc
|
|
|
+@@ -4,6 +4,7 @@
|
|
|
+
|
|
|
+ #include "gpu/command_buffer/service/shared_context_state.h"
|
|
|
+
|
|
|
++#include "base/immediate_crash.h"
|
|
|
+ #include "base/observer_list.h"
|
|
|
+ #include "base/strings/stringprintf.h"
|
|
|
+ #include "base/system/sys_info.h"
|
|
|
+@@ -101,6 +102,13 @@ void SharedContextState::compileError(const char* shader, const char* errors) {
|
|
|
+ << "------------------------\n"
|
|
|
+ << shader << "\nErrors:\n"
|
|
|
+ << errors;
|
|
|
++
|
|
|
++ // Increase shader cache shm count and crash the GPU process so that the
|
|
|
++ // browser process would clear the cache.
|
|
|
++ GpuProcessShmCount::ScopedIncrement increment(
|
|
|
++ use_shader_cache_shm_count_.get());
|
|
|
++
|
|
|
++ base::ImmediateCrash();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+@@ -305,6 +313,7 @@ bool SharedContextState::InitializeGanesh(
|
|
|
+ gl::ProgressReporter* progress_reporter) {
|
|
|
+ progress_reporter_ = progress_reporter;
|
|
|
+ gr_shader_cache_ = cache;
|
|
|
++ use_shader_cache_shm_count_ = use_shader_cache_shm_count;
|
|
|
+
|
|
|
+ size_t max_resource_cache_bytes;
|
|
|
+ size_t glyph_cache_max_texture_bytes;
|
|
|
+diff --git a/gpu/command_buffer/service/shared_context_state.h b/gpu/command_buffer/service/shared_context_state.h
|
|
|
+index 05822df27221cd5003e8c12f809805f3bd0c597b..7c21a81066afd77e310f0fdfca7da92f8f7cb4e1 100644
|
|
|
+--- a/gpu/command_buffer/service/shared_context_state.h
|
|
|
++++ b/gpu/command_buffer/service/shared_context_state.h
|
|
|
+@@ -392,6 +392,8 @@ class GPU_GLES2_EXPORT SharedContextState
|
|
|
+ std::vector<uint8_t> scratch_deserialization_buffer_;
|
|
|
+ raw_ptr<gpu::raster::GrShaderCache, DanglingUntriaged> gr_shader_cache_ =
|
|
|
+ nullptr;
|
|
|
++ raw_ptr<GpuProcessShmCount, DanglingUntriaged> use_shader_cache_shm_count_ =
|
|
|
++ nullptr;
|
|
|
+
|
|
|
+ // |need_context_state_reset| is set whenever Skia may have altered the
|
|
|
+ // driver's GL state.
|