| // Copyright 2015 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 "flutter/flow/compositor_context.h" |
| |
| #include "third_party/skia/include/core/SkCanvas.h" |
| |
| namespace flow { |
| |
| CompositorContext::CompositorContext() {} |
| |
| CompositorContext::~CompositorContext() {} |
| |
| void CompositorContext::BeginFrame(ScopedFrame& frame, |
| bool enable_instrumentation) { |
| if (enable_instrumentation) { |
| frame_count_.Increment(); |
| frame_time_.Start(); |
| } |
| } |
| |
| void CompositorContext::EndFrame(ScopedFrame& frame, |
| bool enable_instrumentation) { |
| raster_cache_.SweepAfterFrame(); |
| if (enable_instrumentation) { |
| frame_time_.Stop(); |
| } |
| } |
| |
| CompositorContext::ScopedFrame CompositorContext::AcquireFrame( |
| GrContext* gr_context, |
| SkCanvas& canvas, |
| bool instrumentation_enabled) { |
| return ScopedFrame(*this, gr_context, canvas, instrumentation_enabled); |
| } |
| |
| CompositorContext::ScopedFrame::ScopedFrame(CompositorContext& context, |
| GrContext* gr_context, |
| SkCanvas& canvas, |
| bool instrumentation_enabled) |
| : context_(context), |
| gr_context_(gr_context), |
| canvas_(&canvas), |
| instrumentation_enabled_(instrumentation_enabled) { |
| context_.BeginFrame(*this, instrumentation_enabled_); |
| } |
| |
| CompositorContext::ScopedFrame::ScopedFrame(ScopedFrame&& frame) = default; |
| |
| CompositorContext::ScopedFrame::~ScopedFrame() { |
| context_.EndFrame(*this, instrumentation_enabled_); |
| } |
| |
| void CompositorContext::OnGrContextDestroyed() { |
| raster_cache_.Clear(); |
| } |
| |
| } // namespace flow |