forked from pool/nodejs-electron
		
	Accepting request 1124066 from home:dziobian:gulgul-ultron:19
- Add backported crash_gpu_process_and_clear_shader_cache_when_skia_reports.patch * fixes “Skia shader compilation error” after some Mesa updates due to stale shader cache (bsc#1214274) OBS-URL: https://build.opensuse.org/request/show/1124066 OBS-URL: https://build.opensuse.org/package/show/devel:languages:nodejs/nodejs-electron?expand=0&rev=107
This commit is contained in:
		@@ -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.
 | 
			
		||||
@@ -1,3 +1,9 @@
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Tue Nov  7 17:10:19 UTC 2023 - Bruno Pitrus <brunopitrus@hotmail.com>
 | 
			
		||||
 | 
			
		||||
- Add backported crash_gpu_process_and_clear_shader_cache_when_skia_reports.patch
 | 
			
		||||
  * fixes “Skia shader compilation error” after some Mesa updates due to stale shader cache (bsc#1214274)
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Wed Nov  1 20:28:50 UTC 2023 - Bruno Pitrus <brunopitrus@hotmail.com>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -383,6 +383,7 @@ Patch3223:      absl-make_unique-missing-include.patch
 | 
			
		||||
Patch3224:      autofill_i18n_parsing_expressions-constexpr.patch
 | 
			
		||||
Patch3225:      simple_font_data-freetype-include.patch
 | 
			
		||||
Patch3226:      perfetto-numeric_storage-double_t.patch
 | 
			
		||||
Patch3227:      crash_gpu_process_and_clear_shader_cache_when_skia_reports.patch
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
%if %{with clang}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user