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

Unified Diff: content/browser/compositor/io_surface_layer_mac.mm

Issue 511923004: Simplify IOSurface CoreAnimation code: Part 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use accessors 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
« no previous file with comments | « content/browser/compositor/io_surface_layer_mac.h ('k') | content/browser/compositor/software_layer_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/compositor/io_surface_layer_mac.mm
diff --git a/content/browser/renderer_host/compositing_iosurface_layer_mac.mm b/content/browser/compositor/io_surface_layer_mac.mm
similarity index 79%
rename from content/browser/renderer_host/compositing_iosurface_layer_mac.mm
rename to content/browser/compositor/io_surface_layer_mac.mm
index 81a3529f0b56c45374e82cf450818ca8d377929f..6693dc19b3d9ba9d4f55ea033eb2a2ffaa97bcc5 100644
--- a/content/browser/renderer_host/compositing_iosurface_layer_mac.mm
+++ b/content/browser/compositor/io_surface_layer_mac.mm
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/browser/renderer_host/compositing_iosurface_layer_mac.h"
+#include "content/browser/compositor/io_surface_layer_mac.h"
#include <CoreFoundation/CoreFoundation.h>
#include <OpenGL/gl.h>
@@ -18,13 +18,13 @@
#include "ui/gl/gpu_switching_manager.h"
////////////////////////////////////////////////////////////////////////////////
-// CompositingIOSurfaceLayerHelper
+// IOSurfaceLayerHelper
namespace content {
-CompositingIOSurfaceLayerHelper::CompositingIOSurfaceLayerHelper(
- CompositingIOSurfaceLayerClient* client,
- CompositingIOSurfaceLayer* layer)
+IOSurfaceLayerHelper::IOSurfaceLayerHelper(
+ IOSurfaceLayerClient* client,
+ IOSurfaceLayer* layer)
: client_(client),
layer_(layer),
needs_display_(false),
@@ -35,15 +35,15 @@ CompositingIOSurfaceLayerHelper::CompositingIOSurfaceLayerHelper(
FROM_HERE,
base::TimeDelta::FromSeconds(1) / 6,
this,
- &CompositingIOSurfaceLayerHelper::TimerFired) {}
+ &IOSurfaceLayerHelper::TimerFired) {}
-CompositingIOSurfaceLayerHelper::~CompositingIOSurfaceLayerHelper() {
+IOSurfaceLayerHelper::~IOSurfaceLayerHelper() {
// Any acks that were waiting on this layer to draw will not occur, so ack
// them now to prevent blocking the renderer.
AckPendingFrame(true);
}
-void CompositingIOSurfaceLayerHelper::GotNewFrame() {
+void IOSurfaceLayerHelper::GotNewFrame() {
// A trace value of 2 indicates that there is a pending swap ack. See
// canDrawInCGLContext for other value meanings.
TRACE_COUNTER_ID1("browser", "PendingSwapAck", this, 2);
@@ -56,7 +56,7 @@ void CompositingIOSurfaceLayerHelper::GotNewFrame() {
// isAsynchronous property to ensure smooth animation. If this is while
// frames are being pumped then ack and display immediately to get a
// correct-sized frame displayed as soon as possible.
- if (is_pumping_frames_ || client_->AcceleratedLayerShouldAckImmediately()) {
+ if (is_pumping_frames_ || client_->IOSurfaceLayerShouldAckImmediately()) {
SetNeedsDisplayAndDisplayAndAck();
} else {
if (![layer_ isAsynchronous])
@@ -64,11 +64,11 @@ void CompositingIOSurfaceLayerHelper::GotNewFrame() {
}
}
-void CompositingIOSurfaceLayerHelper::SetNeedsDisplay() {
+void IOSurfaceLayerHelper::SetNeedsDisplay() {
needs_display_ = true;
}
-bool CompositingIOSurfaceLayerHelper::CanDraw() {
+bool IOSurfaceLayerHelper::CanDraw() {
// If we return NO 30 times in a row, switch to being synchronous to avoid
// burning CPU cycles on this callback.
if (needs_display_) {
@@ -93,24 +93,24 @@ bool CompositingIOSurfaceLayerHelper::CanDraw() {
return needs_display_;
}
-void CompositingIOSurfaceLayerHelper::DidDraw(bool success) {
+void IOSurfaceLayerHelper::DidDraw(bool success) {
needs_display_ = false;
AckPendingFrame(success);
}
-void CompositingIOSurfaceLayerHelper::AckPendingFrame(bool success) {
+void IOSurfaceLayerHelper::AckPendingFrame(bool success) {
if (!has_pending_frame_)
return;
has_pending_frame_ = false;
if (success)
- client_->AcceleratedLayerDidDrawFrame();
+ client_->IOSurfaceLayerDidDrawFrame();
else
- client_->AcceleratedLayerHitError();
+ client_->IOSurfaceLayerHitError();
// A trace value of 0 indicates that there is no longer a pending swap ack.
TRACE_COUNTER_ID1("browser", "PendingSwapAck", this, 0);
}
-void CompositingIOSurfaceLayerHelper::SetNeedsDisplayAndDisplayAndAck() {
+void IOSurfaceLayerHelper::SetNeedsDisplayAndDisplayAndAck() {
// Drawing using setNeedsDisplay and displayIfNeeded will result in
// subsequent canDrawInCGLContext callbacks getting dropped, and jerky
// animation. Disable asynchronous drawing before issuing these calls as a
@@ -123,7 +123,7 @@ void CompositingIOSurfaceLayerHelper::SetNeedsDisplayAndDisplayAndAck() {
DisplayIfNeededAndAck();
}
-void CompositingIOSurfaceLayerHelper::DisplayIfNeededAndAck() {
+void IOSurfaceLayerHelper::DisplayIfNeededAndAck() {
if (!needs_display_)
return;
@@ -145,15 +145,15 @@ void CompositingIOSurfaceLayerHelper::DisplayIfNeededAndAck() {
AckPendingFrame(true);
}
-void CompositingIOSurfaceLayerHelper::TimerFired() {
+void IOSurfaceLayerHelper::TimerFired() {
SetNeedsDisplayAndDisplayAndAck();
}
-void CompositingIOSurfaceLayerHelper::BeginPumpingFrames() {
+void IOSurfaceLayerHelper::BeginPumpingFrames() {
is_pumping_frames_ = true;
}
-void CompositingIOSurfaceLayerHelper::EndPumpingFrames() {
+void IOSurfaceLayerHelper::EndPumpingFrames() {
is_pumping_frames_ = false;
DisplayIfNeededAndAck();
}
@@ -161,9 +161,9 @@ void CompositingIOSurfaceLayerHelper::EndPumpingFrames() {
} // namespace content
////////////////////////////////////////////////////////////////////////////////
-// CompositingIOSurfaceLayer
+// IOSurfaceLayer
-@implementation CompositingIOSurfaceLayer
+@implementation IOSurfaceLayer
- (content::CompositingIOSurfaceMac*)iosurface {
return iosurface_.get();
@@ -173,19 +173,16 @@ void CompositingIOSurfaceLayerHelper::EndPumpingFrames() {
return context_.get();
}
-- (id)initWithIOSurface:(scoped_refptr<content::CompositingIOSurfaceMac>)
- iosurface
- withScaleFactor:(float)scale_factor
- withClient:(content::CompositingIOSurfaceLayerClient*)client {
- DCHECK(iosurface);
+- (id)initWithClient:(content::IOSurfaceLayerClient*)client
+ withScaleFactor:(float)scale_factor {
if (self = [super init]) {
- helper_.reset(new content::CompositingIOSurfaceLayerHelper(client, self));
+ helper_.reset(new content::IOSurfaceLayerHelper(client, self));
- iosurface_ = iosurface;
+ iosurface_ = content::CompositingIOSurfaceMac::Create();
context_ = content::CompositingIOSurfaceContext::Get(
content::CompositingIOSurfaceContext::kCALayerContextWindowNumber);
- if (!context_) {
- LOG(ERROR) << "Failed create CompositingIOSurfaceContext";
+ if (!iosurface_ || !context_) {
+ LOG(ERROR) << "Failed create CompositingIOSurface or context";
[self resetClient];
[self release];
return nil;
@@ -208,6 +205,33 @@ void CompositingIOSurfaceLayerHelper::EndPumpingFrames() {
[super dealloc];
}
+- (bool)gotFrameWithIOSurface:(IOSurfaceID)io_surface_id
+ withPixelSize:(gfx::Size)pixel_size
+ withScaleFactor:(float)scale_factor {
+ bool result = true;
+ gfx::ScopedCGLSetCurrentContext scoped_set_current_context(
+ context_->cgl_context());
+ result = iosurface_->SetIOSurfaceWithContextCurrent(
+ context_, io_surface_id, pixel_size, scale_factor);
+ return result;
+}
+
+- (void)poisonContextAndSharegroup {
+ context_->PoisonContextAndSharegroup();
+}
+
+- (bool)hasBeenPoisoned {
+ return context_->HasBeenPoisoned();
+}
+
+- (float)scaleFactor {
+ return iosurface_->scale_factor();
+}
+
+- (int)rendererID {
+ return iosurface_->GetRendererID();
+}
+
- (void)resetClient {
helper_.reset();
}
@@ -265,7 +289,7 @@ void CompositingIOSurfaceLayerHelper::EndPumpingFrames() {
pixelFormat:(CGLPixelFormatObj)pixelFormat
forLayerTime:(CFTimeInterval)timeInterval
displayTime:(const CVTimeStamp*)timeStamp {
- TRACE_EVENT0("browser", "CompositingIOSurfaceLayer::drawInCGLContext");
+ TRACE_EVENT0("browser", "IOSurfaceLayer::drawInCGLContext");
if (!iosurface_->HasIOSurface() || context_->cgl_context() != glContext) {
glClearColor(1, 1, 1, 1);
« no previous file with comments | « content/browser/compositor/io_surface_layer_mac.h ('k') | content/browser/compositor/software_layer_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698