Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(872)

Unified Diff: content/browser/renderer_host/compositing_iosurface_context_mac.mm

Issue 472663004: Revert of Remove code used by --disable-delegated-renderer on Mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/compositing_iosurface_context_mac.mm
diff --git a/content/browser/renderer_host/compositing_iosurface_context_mac.mm b/content/browser/renderer_host/compositing_iosurface_context_mac.mm
index 5f0979293b3ce92007d012a36dd041f33e37b4be..de978ee178b8b1f885f9e51d49b96333a10f229a 100644
--- a/content/browser/renderer_host/compositing_iosurface_context_mac.mm
+++ b/content/browser/renderer_host/compositing_iosurface_context_mac.mm
@@ -11,6 +11,7 @@
#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/logging.h"
+#include "content/browser/renderer_host/compositing_iosurface_shader_programs_mac.h"
#include "content/browser/gpu/gpu_data_manager_impl.h"
#include "ui/base/ui_base_switches.h"
#include "ui/gl/gl_switches.h"
@@ -69,10 +70,32 @@
// Note that VSync is ignored because CoreAnimation will automatically
// rate limit draws.
+ // Prepare the shader program cache. Precompile the shader programs
+ // needed to draw the IO Surface for non-offscreen contexts.
+ bool prepared = false;
+ scoped_ptr<CompositingIOSurfaceShaderPrograms> shader_program_cache;
+ {
+ gfx::ScopedCGLSetCurrentContext scoped_set_current_context(cgl_context);
+ shader_program_cache.reset(new CompositingIOSurfaceShaderPrograms());
+ if (window_number == kOffscreenContextWindowNumber) {
+ prepared = true;
+ } else {
+ prepared = (
+ shader_program_cache->UseBlitProgram() &&
+ shader_program_cache->UseSolidWhiteProgram());
+ }
+ glUseProgram(0u);
+ }
+ if (!prepared) {
+ LOG(ERROR) << "IOSurface failed to compile/link required shader programs.";
+ return NULL;
+ }
+
return new CompositingIOSurfaceContext(
window_number,
cgl_context_strong,
- cgl_context);
+ cgl_context,
+ shader_program_cache.Pass());
}
void CompositingIOSurfaceContext::PoisonContextAndSharegroup() {
@@ -90,10 +113,12 @@
CompositingIOSurfaceContext::CompositingIOSurfaceContext(
int window_number,
base::ScopedTypeRef<CGLContextObj> cgl_context_strong,
- CGLContextObj cgl_context)
+ CGLContextObj cgl_context,
+ scoped_ptr<CompositingIOSurfaceShaderPrograms> shader_program_cache)
: window_number_(window_number),
cgl_context_strong_(cgl_context_strong),
cgl_context_(cgl_context),
+ shader_program_cache_(shader_program_cache.Pass()),
poisoned_(false) {
DCHECK(window_map()->find(window_number_) == window_map()->end());
window_map()->insert(std::make_pair(window_number_, this));
@@ -104,6 +129,10 @@
CompositingIOSurfaceContext::~CompositingIOSurfaceContext() {
GpuDataManager::GetInstance()->RemoveObserver(this);
+ {
+ gfx::ScopedCGLSetCurrentContext scoped_set_current_context(cgl_context_);
+ shader_program_cache_->Reset();
+ }
if (!poisoned_) {
DCHECK(window_map()->find(window_number_) != window_map()->end());
DCHECK(window_map()->find(window_number_)->second == this);

Powered by Google App Engine
This is Rietveld 408576698