blob: 1e1666c9e9266da02c06a18e020e02964954b0ea [file] [log] [blame]
// 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_PAINT_SUBSEQUENCE_RECORDER_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_PAINT_SUBSEQUENCE_RECORDER_H_
#include "base/macros.h"
#include "third_party/blink/renderer/platform/graphics/graphics_context.h"
#include "third_party/blink/renderer/platform/graphics/paint/display_item.h"
#include "third_party/blink/renderer/platform/graphics/paint/paint_controller.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
namespace blink {
class GraphicsContext;
class PaintController;
// SubsequenceRecorder records BeginSubsequenceDisplayItem and
// EndSubsequenceDisplayItem sentinels at either end of a continguous sequence
// of DisplayItems, and supports caching via a CachedDisplayItem with the
// CachedSubsequence DisplayItem type.
//
// Also note that UseCachedSubsequenceIfPossible is not sufficient to determine
// whether a CachedSubsequence can be used. In particular, the client is
// responsible for checking that none of the DisplayItemClients that contribute
// to the subsequence have been invalidated.
//
class SubsequenceRecorder final {
STACK_ALLOCATED();
public:
static bool UseCachedSubsequenceIfPossible(GraphicsContext& context,
const DisplayItemClient& client) {
return context.GetPaintController().UseCachedSubsequenceIfPossible(client);
}
SubsequenceRecorder(GraphicsContext& context, const DisplayItemClient& client)
: paint_controller_(context.GetPaintController()),
client_(client),
start_(0) {
start_ = paint_controller_.BeginSubsequence();
}
~SubsequenceRecorder() { paint_controller_.EndSubsequence(client_, start_); }
private:
PaintController& paint_controller_;
const DisplayItemClient& client_;
wtf_size_t start_;
DISALLOW_COPY_AND_ASSIGN(SubsequenceRecorder);
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_PAINT_SUBSEQUENCE_RECORDER_H_