forked from electron/electron
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: broken shader cache due to compilation error (electron#40450)
- Loading branch information
1 parent
a77f2e0
commit 0b847b0
Showing
2 changed files
with
71 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
70 changes: 70 additions & 0 deletions
70
patches/chromium/crash_gpu_process_and_clear_shader_cache_when_skia_reports.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Le Hoang Quyen <lehoangquyen@chromium.org> | ||
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 <sunnyps@chromium.org> | ||
Commit-Queue: Quyen Le <lehoangquyen@chromium.org> | ||
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. |