| Index: ui/accelerated_widget_mac/io_surface_layer.mm | 
| diff --git a/ui/accelerated_widget_mac/io_surface_layer.mm b/ui/accelerated_widget_mac/io_surface_layer.mm | 
| deleted file mode 100644 | 
| index d880316d9168285d05aeed0b8e657f92ba0e1efa..0000000000000000000000000000000000000000 | 
| --- a/ui/accelerated_widget_mac/io_surface_layer.mm | 
| +++ /dev/null | 
| @@ -1,303 +0,0 @@ | 
| -// Copyright 2013 The Chromium Authors. All rights reserved. | 
| -// Use of this source code is governed by a BSD-style license that can be | 
| -// found in the LICENSE file. | 
| - | 
| -#include "ui/accelerated_widget_mac/io_surface_layer.h" | 
| - | 
| -#include <CoreFoundation/CoreFoundation.h> | 
| -#include <OpenGL/CGLIOSurface.h> | 
| -#include <OpenGL/CGLRenderers.h> | 
| -#include <OpenGL/gl.h> | 
| -#include <OpenGL/OpenGL.h> | 
| - | 
| -#include "base/mac/sdk_forward_declarations.h" | 
| -#include "base/trace_event/trace_event.h" | 
| -#include "ui/accelerated_widget_mac/io_surface_context.h" | 
| -#include "ui/accelerated_widget_mac/io_surface_texture.h" | 
| -#include "ui/base/cocoa/animation_utils.h" | 
| -#include "ui/gfx/geometry/size_conversions.h" | 
| -#include "ui/gl/gpu_switching_manager.h" | 
| - | 
| -//////////////////////////////////////////////////////////////////////////////// | 
| -// IOSurfaceLayerHelper | 
| - | 
| -namespace ui { | 
| - | 
| -IOSurfaceLayerHelper::IOSurfaceLayerHelper( | 
| -    IOSurfaceLayerClient* client, | 
| -    IOSurfaceLayer* layer) | 
| -        : client_(client), | 
| -          layer_(layer), | 
| -          needs_display_(false), | 
| -          has_pending_frame_(false), | 
| -          did_not_draw_counter_(0), | 
| -          is_pumping_frames_(false), | 
| -          timer_( | 
| -              FROM_HERE, | 
| -              base::TimeDelta::FromSeconds(1) / 6, | 
| -              this, | 
| -              &IOSurfaceLayerHelper::TimerFired) {} | 
| - | 
| -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 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); | 
| - | 
| -  has_pending_frame_ = true; | 
| -  needs_display_ = true; | 
| -  timer_.Reset(); | 
| - | 
| -  // If reqested, draw immediately and don't bother trying to use the | 
| -  // 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_->IOSurfaceLayerShouldAckImmediately()) { | 
| -    SetNeedsDisplayAndDisplayAndAck(); | 
| -  } else { | 
| -    if (![layer_ isAsynchronous]) | 
| -      [layer_ setAsynchronous:YES]; | 
| -  } | 
| -} | 
| - | 
| -void IOSurfaceLayerHelper::SetNeedsDisplay() { | 
| -  needs_display_ = true; | 
| -} | 
| - | 
| -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_) { | 
| -    did_not_draw_counter_ = 0; | 
| -  } else { | 
| -    did_not_draw_counter_ += 1; | 
| -    if (did_not_draw_counter_ == 30) | 
| -      [layer_ setAsynchronous:NO]; | 
| -  } | 
| - | 
| -  if (needs_display_) { | 
| -    // If there is a draw pending then increase the signal from 2 to 3, to | 
| -    // indicate that we are in the state where there is a swap pending and | 
| -    // CoreAnimation has been committed to draw it. | 
| -    TRACE_COUNTER_ID1("browser", "PendingSwapAck", this, 3); | 
| -  } else { | 
| -    // If there is not a draw pending, then give an instantaneous blip up from | 
| -    // 0 to 1, indicating that CoreAnimation was ready to draw a frame but we | 
| -    // were not (or didn't have new content to draw). | 
| -    TRACE_COUNTER_ID1("browser", "PendingSwapAck", this, 1); | 
| -    TRACE_COUNTER_ID1("browser", "PendingSwapAck", this, 0); | 
| -  } | 
| - | 
| -  return needs_display_; | 
| -} | 
| - | 
| -void IOSurfaceLayerHelper::DidDraw(bool success) { | 
| -  needs_display_ = false; | 
| -  AckPendingFrame(success); | 
| -} | 
| - | 
| -void IOSurfaceLayerHelper::AckPendingFrame(bool success) { | 
| -  if (!has_pending_frame_) | 
| -    return; | 
| -  has_pending_frame_ = false; | 
| -  if (success) | 
| -    client_->IOSurfaceLayerDidDrawFrame(); | 
| -  else | 
| -    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 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 | 
| -  // workaround. | 
| -  // http://crbug.com/395827 | 
| -  if ([layer_ isAsynchronous]) | 
| -    [layer_ setAsynchronous:NO]; | 
| - | 
| -  [layer_ setNeedsDisplay]; | 
| -  DisplayIfNeededAndAck(); | 
| -} | 
| - | 
| -void IOSurfaceLayerHelper::DisplayIfNeededAndAck() { | 
| -  if (!needs_display_) | 
| -    return; | 
| - | 
| -  // As in SetNeedsDisplayAndDisplayAndAck, disable asynchronous drawing before | 
| -  // issuing displayIfNeeded. | 
| -  // http://crbug.com/395827 | 
| -  if ([layer_ isAsynchronous]) | 
| -    [layer_ setAsynchronous:NO]; | 
| - | 
| -  // Do not bother drawing while pumping new frames -- wait until the waiting | 
| -  // block ends to draw any of the new frames. | 
| -  if (!is_pumping_frames_) | 
| -    [layer_ displayIfNeeded]; | 
| - | 
| -  // Calls to setNeedsDisplay can sometimes be ignored, especially if issued | 
| -  // rapidly (e.g, with vsync off). This is unacceptable because the failure | 
| -  // to ack a single frame will hang the renderer. Ensure that the renderer | 
| -  // not be blocked by lying and claiming that we drew the frame. | 
| -  AckPendingFrame(true); | 
| -} | 
| - | 
| -void IOSurfaceLayerHelper::TimerFired() { | 
| -  DisplayIfNeededAndAck(); | 
| -} | 
| - | 
| -void IOSurfaceLayerHelper::BeginPumpingFrames() { | 
| -  is_pumping_frames_ = true; | 
| -} | 
| - | 
| -void IOSurfaceLayerHelper::EndPumpingFrames() { | 
| -  is_pumping_frames_ = false; | 
| -  DisplayIfNeededAndAck(); | 
| -} | 
| - | 
| -}  // namespace ui | 
| - | 
| -//////////////////////////////////////////////////////////////////////////////// | 
| -// IOSurfaceLayer | 
| - | 
| -@implementation IOSurfaceLayer | 
| - | 
| -- (id)initWithClient:(ui::IOSurfaceLayerClient*)client | 
| -            withScaleFactor:(float)scale_factor | 
| -    needsGLFinishWorkaround:(bool)needs_gl_finish_workaround { | 
| -  if (self = [super init]) { | 
| -    helper_.reset(new ui::IOSurfaceLayerHelper(client, self)); | 
| - | 
| -    iosurface_ = ui::IOSurfaceTexture::Create( | 
| -        needs_gl_finish_workaround, false); | 
| -    context_ = ui::IOSurfaceContext::Get( | 
| -        ui::IOSurfaceContext::kCALayerContext); | 
| -    if (!iosurface_.get() || !context_.get()) { | 
| -      LOG(ERROR) << "Failed create CompositingIOSurface or context"; | 
| -      [self resetClient]; | 
| -      [self release]; | 
| -      return nil; | 
| -    } | 
| - | 
| -    [self setAnchorPoint:CGPointMake(0, 0)]; | 
| -    // Setting contents gravity is necessary to prevent the layer from being | 
| -    // scaled during dyanmic resizes (especially with devtools open). | 
| -    [self setContentsGravity:kCAGravityTopLeft]; | 
| -    if ([self respondsToSelector:(@selector(setContentsScale:))]) { | 
| -      [self setContentsScale:scale_factor]; | 
| -    } | 
| -  } | 
| -  return self; | 
| -} | 
| - | 
| -- (void)dealloc { | 
| -  DCHECK(!helper_); | 
| -  [super dealloc]; | 
| -} | 
| - | 
| -- (bool)gotFrameWithIOSurface:(IOSurfaceID)io_surface_id | 
| -                withPixelSize:(gfx::Size)pixel_size | 
| -              withScaleFactor:(float)scale_factor { | 
| -  return iosurface_->SetIOSurface(io_surface_id, pixel_size); | 
| -} | 
| - | 
| -- (void)poisonContextAndSharegroup { | 
| -  context_->PoisonContextAndSharegroup(); | 
| -} | 
| - | 
| -- (bool)hasBeenPoisoned { | 
| -  return context_->HasBeenPoisoned(); | 
| -} | 
| - | 
| -- (float)scaleFactor { | 
| -  if ([self respondsToSelector:(@selector(contentsScale))]) | 
| -    return [self contentsScale]; | 
| -  return 1; | 
| -} | 
| - | 
| -- (int)rendererID { | 
| -  GLint current_renderer_id = -1; | 
| -  if (CGLGetParameter(context_->cgl_context(), | 
| -                      kCGLCPCurrentRendererID, | 
| -                      ¤t_renderer_id) == kCGLNoError) { | 
| -    return current_renderer_id & kCGLRendererIDMatchingMask; | 
| -  } | 
| -  return -1; | 
| -} | 
| - | 
| -- (void)resetClient { | 
| -  helper_.reset(); | 
| -} | 
| - | 
| -- (void)gotNewFrame { | 
| -  helper_->GotNewFrame(); | 
| -} | 
| - | 
| -- (void)setNeedsDisplayAndDisplayAndAck { | 
| -  helper_->SetNeedsDisplayAndDisplayAndAck(); | 
| -} | 
| - | 
| -- (void)displayIfNeededAndAck { | 
| -  helper_->DisplayIfNeededAndAck(); | 
| -} | 
| - | 
| -- (void)beginPumpingFrames { | 
| -  helper_->BeginPumpingFrames(); | 
| -} | 
| - | 
| -- (void)endPumpingFrames { | 
| -  helper_->EndPumpingFrames(); | 
| -} | 
| - | 
| -// The remaining methods implement the CAOpenGLLayer interface. | 
| - | 
| -- (CGLPixelFormatObj)copyCGLPixelFormatForDisplayMask:(uint32_t)mask { | 
| -  if (!context_.get()) | 
| -    return [super copyCGLPixelFormatForDisplayMask:mask]; | 
| -  return CGLRetainPixelFormat(CGLGetPixelFormat(context_->cgl_context())); | 
| -} | 
| - | 
| -- (CGLContextObj)copyCGLContextForPixelFormat:(CGLPixelFormatObj)pixelFormat { | 
| -  if (!context_.get()) | 
| -    return [super copyCGLContextForPixelFormat:pixelFormat]; | 
| -  return CGLRetainContext(context_->cgl_context()); | 
| -} | 
| - | 
| -- (void)setNeedsDisplay { | 
| -  if (helper_) | 
| -    helper_->SetNeedsDisplay(); | 
| -  [super setNeedsDisplay]; | 
| -} | 
| - | 
| -- (BOOL)canDrawInCGLContext:(CGLContextObj)glContext | 
| -                pixelFormat:(CGLPixelFormatObj)pixelFormat | 
| -               forLayerTime:(CFTimeInterval)timeInterval | 
| -                displayTime:(const CVTimeStamp*)timeStamp { | 
| -  if (helper_) | 
| -    return helper_->CanDraw(); | 
| -  return NO; | 
| -} | 
| - | 
| -- (void)drawInCGLContext:(CGLContextObj)glContext | 
| -             pixelFormat:(CGLPixelFormatObj)pixelFormat | 
| -            forLayerTime:(CFTimeInterval)timeInterval | 
| -             displayTime:(const CVTimeStamp*)timeStamp { | 
| -  TRACE_EVENT0("browser", "IOSurfaceLayer::drawInCGLContext"); | 
| - | 
| -  bool draw_succeeded = iosurface_->DrawIOSurface(); | 
| -  if (helper_) | 
| -    helper_->DidDraw(draw_succeeded); | 
| - | 
| -  [super drawInCGLContext:glContext | 
| -              pixelFormat:pixelFormat | 
| -             forLayerTime:timeInterval | 
| -              displayTime:timeStamp]; | 
| -} | 
| - | 
| -@end | 
|  |