0

[cc] Make "no_cache" only accessible through PaintImageBuilder

This was suggested as a cleanup in
https://chromium-review.googlesource.com/c/chromium/src/+/4683446. Let's
do it, it's cleaner.

Bug: 1464610
Change-Id: I375e65d38f4c9338d9c2aa43348596648109a52b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4907029
Reviewed-by: ccameron chromium <ccameron@chromium.org>
Reviewed-by: K. Moon <kmoon@chromium.org>
Commit-Queue: Benoit Lize <lizeb@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1205172}
This commit is contained in:
Benoit Lize
2023-10-04 11:51:14 +00:00
committed by Chromium LUCI CQ
parent f398c68b02
commit a706558653
4 changed files with 17 additions and 11 deletions

@ -280,7 +280,6 @@ class CC_PAINT_EXPORT PaintImage {
bool is_high_bit_depth() const { return is_high_bit_depth_; }
bool may_be_lcp_candidate() const { return may_be_lcp_candidate_; }
bool no_cache() const { return no_cache_; }
void set_no_cache(bool no_cache) { no_cache_ = no_cache; }
int repetition_count() const { return repetition_count_; }
bool ShouldAnimate() const;
AnimationSequenceId reset_animation_sequence_id() const {

@ -101,6 +101,10 @@ class CC_PAINT_EXPORT PaintImageBuilder {
paint_image_.may_be_lcp_candidate_ = may_be_lcp_candidate;
return std::move(*this);
}
PaintImageBuilder&& set_no_cache(bool no_cache) {
paint_image_.no_cache_ = no_cache;
return std::move(*this);
}
PaintImageBuilder&& set_repetition_count(int count) {
paint_image_.repetition_count_ = count;
return std::move(*this);

@ -24,6 +24,7 @@
#include "cc/paint/color_filter.h"
#include "cc/paint/draw_image.h"
#include "cc/paint/image_transfer_cache_entry.h"
#include "cc/paint/paint_image.h"
#include "cc/paint/paint_image_builder.h"
#include "cc/paint/paint_op_writer.h"
#include "cc/test/fake_paint_image_generator.h"
@ -4882,9 +4883,12 @@ TEST_P(GpuImageDecodeCachePurgeOnTimerTest, NoDeadlock) {
TEST_P(GpuImageDecodeCachePurgeOnTimerTest, NoCache) {
const uint32_t client_id = cache_->GenerateClientId();
PaintImage image = CreatePaintImageInternal(GetNormalImageSize());
image.set_no_cache(true);
DrawImage draw_image = CreateDrawImageInternal(image);
PaintImage image_no_cache =
PaintImageBuilder::WithCopy(
CreatePaintImageInternal(GetNormalImageSize()))
.set_no_cache(true)
.TakePaintImage();
DrawImage draw_image = CreateDrawImageInternal(image_no_cache);
ImageDecodeCache::TaskResult result = cache_->GetTaskForImageAndRef(
client_id, draw_image, ImageDecodeCache::TracingInfo());

@ -1883,12 +1883,6 @@ void PdfViewWebPlugin::ClearDeferredInvalidates() {
}
void PdfViewWebPlugin::UpdateSnapshot(sk_sp<SkImage> snapshot) {
snapshot_ =
cc::PaintImageBuilder::WithDefault()
.set_image(std::move(snapshot), cc::PaintImage::GetNextContentId())
.set_id(cc::PaintImage::GetNextId())
.TakePaintImage();
// Every time something changes (e.g. scale or scroll position),
// `UpdateSnapshot()` is called, so the snapshot is effectively used only
// once. Make it "no-cache" so that the old snapshots are not cached
@ -1899,7 +1893,12 @@ void PdfViewWebPlugin::UpdateSnapshot(sk_sp<SkImage> snapshot) {
// service transfer cache. The size of the service transfer cache is bounded,
// so on desktop this "only" causes a 256MiB memory spike, but it's completely
// wasted memory nonetheless.
snapshot_.set_no_cache(true);
snapshot_ =
cc::PaintImageBuilder::WithDefault()
.set_image(std::move(snapshot), cc::PaintImage::GetNextContentId())
.set_id(cc::PaintImage::GetNextId())
.set_no_cache(true)
.TakePaintImage();
if (!plugin_rect_.IsEmpty())
InvalidatePluginContainer();