summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCodeByThePound <CodeByThePound@gmail.com>2015-05-11 15:28:53 -0700
committerCommit bot <commit-bot@chromium.org>2015-05-11 22:29:41 +0000
commitc16f8dcdc00218681934a1425f53c9badefbe01a (patch)
tree66378fb06ec36fd0e9770ded0669cb35a3a48d89
parentc21dedb00ba88b0679d03467e510062bc2d82282 (diff)
downloadchromium_src-c16f8dcdc00218681934a1425f53c9badefbe01a.zip
chromium_src-c16f8dcdc00218681934a1425f53c9badefbe01a.tar.gz
chromium_src-c16f8dcdc00218681934a1425f53c9badefbe01a.tar.bz2
Add ContextProvider::InvalidateGrContext to reset GL state in GrContext
If rendering code that is shared with GrContext changes any GL state, then skia caches need to be notified. This adds InvalidateGrContext() method that will call private pure virtual method. InvalidateGrContext default argument will clear all state in GrContext. Updated classes that derive from ContextProvider. R=piman@chromium.org BUG= Review URL: https://codereview.chromium.org/1131723002 Cr-Commit-Position: refs/heads/master@{#329255}
-rw-r--r--android_webview/browser/aw_render_thread_context_provider.cc7
-rw-r--r--android_webview/browser/aw_render_thread_context_provider.h1
-rw-r--r--cc/output/context_provider.h4
-rw-r--r--cc/resources/tile_task_worker_pool_perftest.cc4
-rw-r--r--cc/test/test_context_provider.cc8
-rw-r--r--cc/test/test_context_provider.h1
-rw-r--r--cc/test/test_in_process_context_provider.cc5
-rw-r--r--cc/test/test_in_process_context_provider.h1
-rw-r--r--components/surfaces/context_provider_mojo.cc3
-rw-r--r--components/surfaces/context_provider_mojo.h1
-rw-r--r--content/browser/android/in_process/context_provider_in_process.cc9
-rw-r--r--content/browser/android/in_process/context_provider_in_process.h1
-rw-r--r--content/common/gpu/client/context_provider_command_buffer.cc8
-rw-r--r--content/common/gpu/client/context_provider_command_buffer.h1
-rw-r--r--mojo/cc/context_provider_mojo.cc3
-rw-r--r--mojo/cc/context_provider_mojo.h1
-rw-r--r--ui/compositor/test/in_process_context_provider.cc7
-rw-r--r--ui/compositor/test/in_process_context_provider.h1
18 files changed, 66 insertions, 0 deletions
diff --git a/android_webview/browser/aw_render_thread_context_provider.cc b/android_webview/browser/aw_render_thread_context_provider.cc
index ce31148..9b6e5d4 100644
--- a/android_webview/browser/aw_render_thread_context_provider.cc
+++ b/android_webview/browser/aw_render_thread_context_provider.cc
@@ -142,6 +142,13 @@ class GrContext* AwRenderThreadContextProvider::GrContext() {
return gr_context_.get();
}
+void AwRenderThreadContextProvider::InvalidateGrContext(uint32_t state) {
+ DCHECK(main_thread_checker_.CalledOnValidThread());
+
+ if (gr_context_)
+ gr_context_.get()->resetContext(state);
+}
+
void AwRenderThreadContextProvider::SetupLock() {
context_->SetLock(&context_lock_);
}
diff --git a/android_webview/browser/aw_render_thread_context_provider.h b/android_webview/browser/aw_render_thread_context_provider.h
index bb94e65..7501a1b 100644
--- a/android_webview/browser/aw_render_thread_context_provider.h
+++ b/android_webview/browser/aw_render_thread_context_provider.h
@@ -41,6 +41,7 @@ class AwRenderThreadContextProvider : public cc::ContextProvider {
gpu::gles2::GLES2Interface* ContextGL() override;
gpu::ContextSupport* ContextSupport() override;
class GrContext* GrContext() override;
+ void InvalidateGrContext(uint32_t state) override;
void SetupLock() override;
base::Lock* GetLock() override;
bool IsContextLost() override;
diff --git a/cc/output/context_provider.h b/cc/output/context_provider.h
index 71d06bd..dfaab4a 100644
--- a/cc/output/context_provider.h
+++ b/cc/output/context_provider.h
@@ -44,6 +44,10 @@ class ContextProvider : public base::RefCountedThreadSafe<ContextProvider> {
CC_EXPORT Capabilities();
};
+ // Invalidates the cached OpenGL state in GrContext.
+ // See skia GrContext::resetContext for details.
+ virtual void InvalidateGrContext(uint32_t state) = 0;
+
// Sets up a lock so this context can be used from multiple threads.
virtual void SetupLock() = 0;
diff --git a/cc/resources/tile_task_worker_pool_perftest.cc b/cc/resources/tile_task_worker_pool_perftest.cc
index b36dd12..27b0154 100644
--- a/cc/resources/tile_task_worker_pool_perftest.cc
+++ b/cc/resources/tile_task_worker_pool_perftest.cc
@@ -90,6 +90,10 @@ class PerfContextProvider : public ContextProvider {
reinterpret_cast<GrBackendContext>(null_interface.get())));
return gr_context_.get();
}
+ void InvalidateGrContext(uint32_t state) override {
+ if (gr_context_)
+ gr_context_.get()->resetContext(state);
+ }
void SetupLock() override {}
base::Lock* GetLock() override { return &context_lock_; }
bool IsContextLost() override { return false; }
diff --git a/cc/test/test_context_provider.cc b/cc/test/test_context_provider.cc
index 7c9bb2c..2bf803c 100644
--- a/cc/test/test_context_provider.cc
+++ b/cc/test/test_context_provider.cc
@@ -112,6 +112,14 @@ class GrContext* TestContextProvider::GrContext() {
return gr_context_.get();
}
+void TestContextProvider::InvalidateGrContext(uint32_t state) {
+ DCHECK(bound_);
+ DCHECK(context_thread_checker_.CalledOnValidThread());
+
+ if (gr_context_)
+ gr_context_.get()->resetContext(state);
+}
+
void TestContextProvider::SetupLock() {
}
diff --git a/cc/test/test_context_provider.h b/cc/test/test_context_provider.h
index 9dd7b62..54b2ed5 100644
--- a/cc/test/test_context_provider.h
+++ b/cc/test/test_context_provider.h
@@ -34,6 +34,7 @@ class TestContextProvider : public ContextProvider {
gpu::gles2::GLES2Interface* ContextGL() override;
gpu::ContextSupport* ContextSupport() override;
class GrContext* GrContext() override;
+ void InvalidateGrContext(uint32_t state) override;
void SetupLock() override;
base::Lock* GetLock() override;
bool IsContextLost() override;
diff --git a/cc/test/test_in_process_context_provider.cc b/cc/test/test_in_process_context_provider.cc
index 3539bd2..927986d 100644
--- a/cc/test/test_in_process_context_provider.cc
+++ b/cc/test/test_in_process_context_provider.cc
@@ -124,6 +124,11 @@ class GrContext* TestInProcessContextProvider::GrContext() {
return gr_context_.get();
}
+void TestInProcessContextProvider::InvalidateGrContext(uint32_t state) {
+ if (gr_context_)
+ gr_context_.get()->resetContext(state);
+}
+
void TestInProcessContextProvider::SetupLock() {
}
diff --git a/cc/test/test_in_process_context_provider.h b/cc/test/test_in_process_context_provider.h
index 9fa77b7..bb56e57 100644
--- a/cc/test/test_in_process_context_provider.h
+++ b/cc/test/test_in_process_context_provider.h
@@ -32,6 +32,7 @@ class TestInProcessContextProvider : public ContextProvider {
gpu::gles2::GLES2Interface* ContextGL() override;
gpu::ContextSupport* ContextSupport() override;
class GrContext* GrContext() override;
+ void InvalidateGrContext(uint32_t state) override;
void SetupLock() override;
base::Lock* GetLock() override;
Capabilities ContextCapabilities() override;
diff --git a/components/surfaces/context_provider_mojo.cc b/components/surfaces/context_provider_mojo.cc
index f9efbcc..8e8ebc3 100644
--- a/components/surfaces/context_provider_mojo.cc
+++ b/components/surfaces/context_provider_mojo.cc
@@ -43,6 +43,9 @@ class GrContext* ContextProviderMojo::GrContext() {
return NULL;
}
+void ContextProviderMojo::InvalidateGrContext(uint32_t state) {
+}
+
cc::ContextProvider::Capabilities ContextProviderMojo::ContextCapabilities() {
return capabilities_;
}
diff --git a/components/surfaces/context_provider_mojo.h b/components/surfaces/context_provider_mojo.h
index 7d91fda..2e1b7f1 100644
--- a/components/surfaces/context_provider_mojo.h
+++ b/components/surfaces/context_provider_mojo.h
@@ -22,6 +22,7 @@ class ContextProviderMojo : public cc::ContextProvider {
gpu::gles2::GLES2Interface* ContextGL() override;
gpu::ContextSupport* ContextSupport() override;
class GrContext* GrContext() override;
+ void InvalidateGrContext(uint32_t state) override;
Capabilities ContextCapabilities() override;
bool IsContextLost() override;
void VerifyContexts() override {}
diff --git a/content/browser/android/in_process/context_provider_in_process.cc b/content/browser/android/in_process/context_provider_in_process.cc
index ed26bd5..3f0f341 100644
--- a/content/browser/android/in_process/context_provider_in_process.cc
+++ b/content/browser/android/in_process/context_provider_in_process.cc
@@ -11,6 +11,7 @@
#include "content/common/gpu/client/grcontext_for_webgraphicscontext3d.h"
#include "gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.h"
#include "gpu/command_buffer/client/gles2_implementation.h"
+#include "third_party/skia/include/gpu/GrContext.h"
using gpu_blink::WebGraphicsContext3DInProcessCommandBufferImpl;
@@ -159,6 +160,14 @@ class GrContext* ContextProviderInProcess::GrContext() {
return gr_context_->get();
}
+void ContextProviderInProcess::InvalidateGrContext(uint32_t state) {
+ DCHECK(lost_context_callback_proxy_); // Is bound to thread.
+ DCHECK(context_thread_checker_.CalledOnValidThread());
+
+ if (gr_context_)
+ return gr_context_->get()->resetContext(state);
+}
+
void ContextProviderInProcess::SetupLock() {
context3d_->SetLock(&context_lock_);
}
diff --git a/content/browser/android/in_process/context_provider_in_process.h b/content/browser/android/in_process/context_provider_in_process.h
index 1a0066e..946184a 100644
--- a/content/browser/android/in_process/context_provider_in_process.h
+++ b/content/browser/android/in_process/context_provider_in_process.h
@@ -52,6 +52,7 @@ class ContextProviderInProcess
::gpu::gles2::GLES2Interface* ContextGL() override;
::gpu::ContextSupport* ContextSupport() override;
class GrContext* GrContext() override;
+ void InvalidateGrContext(uint32_t state) override;
void SetupLock() override;
base::Lock* GetLock() override;
bool IsContextLost() override;
diff --git a/content/common/gpu/client/context_provider_command_buffer.cc b/content/common/gpu/client/context_provider_command_buffer.cc
index eb70964..2f00de1 100644
--- a/content/common/gpu/client/context_provider_command_buffer.cc
+++ b/content/common/gpu/client/context_provider_command_buffer.cc
@@ -143,6 +143,14 @@ class GrContext* ContextProviderCommandBuffer::GrContext() {
return gr_context_->get();
}
+void ContextProviderCommandBuffer::InvalidateGrContext(uint32_t state) {
+ if (gr_context_) {
+ DCHECK(lost_context_callback_proxy_); // Is bound to thread.
+ DCHECK(context_thread_checker_.CalledOnValidThread());
+ gr_context_->get()->resetContext(state);
+ }
+}
+
void ContextProviderCommandBuffer::SetupLock() {
DCHECK(context3d_);
context3d_->GetCommandBufferProxy()->SetLock(&context_lock_);
diff --git a/content/common/gpu/client/context_provider_command_buffer.h b/content/common/gpu/client/context_provider_command_buffer.h
index 1b4249a..78c1b29 100644
--- a/content/common/gpu/client/context_provider_command_buffer.h
+++ b/content/common/gpu/client/context_provider_command_buffer.h
@@ -39,6 +39,7 @@ class CONTENT_EXPORT ContextProviderCommandBuffer
gpu::gles2::GLES2Interface* ContextGL() override;
gpu::ContextSupport* ContextSupport() override;
class GrContext* GrContext() override;
+ void InvalidateGrContext(uint32_t state) override;
void SetupLock() override;
base::Lock* GetLock() override;
Capabilities ContextCapabilities() override;
diff --git a/mojo/cc/context_provider_mojo.cc b/mojo/cc/context_provider_mojo.cc
index aed1712..dff9362 100644
--- a/mojo/cc/context_provider_mojo.cc
+++ b/mojo/cc/context_provider_mojo.cc
@@ -39,6 +39,9 @@ gpu::ContextSupport* ContextProviderMojo::ContextSupport() {
class GrContext* ContextProviderMojo::GrContext() { return NULL; }
+void ContextProviderMojo::InvalidateGrContext(uint32_t state) {
+}
+
cc::ContextProvider::Capabilities ContextProviderMojo::ContextCapabilities() {
return capabilities_;
}
diff --git a/mojo/cc/context_provider_mojo.h b/mojo/cc/context_provider_mojo.h
index f206fc2..2102ef26 100644
--- a/mojo/cc/context_provider_mojo.h
+++ b/mojo/cc/context_provider_mojo.h
@@ -23,6 +23,7 @@ class ContextProviderMojo : public cc::ContextProvider {
gpu::gles2::GLES2Interface* ContextGL() override;
gpu::ContextSupport* ContextSupport() override;
class GrContext* GrContext() override;
+ void InvalidateGrContext(uint32_t state) override;
void SetupLock() override;
base::Lock* GetLock() override;
Capabilities ContextCapabilities() override;
diff --git a/ui/compositor/test/in_process_context_provider.cc b/ui/compositor/test/in_process_context_provider.cc
index d59736f..6e252d8 100644
--- a/ui/compositor/test/in_process_context_provider.cc
+++ b/ui/compositor/test/in_process_context_provider.cc
@@ -165,6 +165,13 @@ class GrContext* InProcessContextProvider::GrContext() {
return gr_context_.get();
}
+void InProcessContextProvider::InvalidateGrContext(uint32_t state) {
+ DCHECK(context_thread_checker_.CalledOnValidThread());
+
+ if (gr_context_)
+ gr_context_.get()->resetContext(state);
+}
+
void InProcessContextProvider::SetupLock() {
}
diff --git a/ui/compositor/test/in_process_context_provider.h b/ui/compositor/test/in_process_context_provider.h
index b3c9da0..5944bf9 100644
--- a/ui/compositor/test/in_process_context_provider.h
+++ b/ui/compositor/test/in_process_context_provider.h
@@ -48,6 +48,7 @@ class InProcessContextProvider : public cc::ContextProvider {
gpu::gles2::GLES2Interface* ContextGL() override;
gpu::ContextSupport* ContextSupport() override;
class GrContext* GrContext() override;
+ void InvalidateGrContext(uint32_t state) override;
void SetupLock() override;
base::Lock* GetLock() override;
bool IsContextLost() override;