1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CC_TILES_TILE_DRAW_INFO_H_
#define CC_TILES_TILE_DRAW_INFO_H_
#include "base/notreached.h"
#include "base/trace_event/traced_value.h"
#include "cc/resources/resource_pool.h"
#include "components/viz/common/resources/platform_color.h"
#include "third_party/skia/include/core/SkColor.h"
namespace cc {
// This class holds all the state relevant to drawing a tile.
class CC_EXPORT TileDrawInfo {
public:
enum Mode { RESOURCE_MODE, SOLID_COLOR_MODE, OOM_MODE };
TileDrawInfo();
~TileDrawInfo();
Mode mode() const { return mode_; }
bool IsReadyToDraw() const {
switch (mode_) {
case RESOURCE_MODE:
return is_resource_ready_to_draw_;
case SOLID_COLOR_MODE:
case OOM_MODE:
return true;
}
NOTREACHED();
}
bool NeedsRaster() const {
switch (mode_) {
case RESOURCE_MODE:
return !resource_;
case SOLID_COLOR_MODE:
return false;
case OOM_MODE:
return true;
}
NOTREACHED();
}
viz::ResourceId resource_id_for_export() const {
DCHECK(mode_ == RESOURCE_MODE);
DCHECK(resource_);
return resource_.resource_id_for_export();
}
const gfx::Size& resource_size() const {
DCHECK(mode_ == RESOURCE_MODE);
DCHECK(resource_);
return resource_.size();
}
const viz::SharedImageFormat& resource_shared_image_format() const {
DCHECK(mode_ == RESOURCE_MODE);
DCHECK(resource_);
return resource_.format();
}
SkColor4f solid_color() const {
DCHECK(mode_ == SOLID_COLOR_MODE);
return solid_color_;
}
bool requires_resource() const {
return mode_ == RESOURCE_MODE || mode_ == OOM_MODE;
}
inline bool has_resource() const { return !!resource_; }
bool is_resource_ready_to_draw() const { return is_resource_ready_to_draw_; }
const ResourcePool::InUsePoolResource& GetResource() const;
bool is_checker_imaged() const {
DCHECK(!resource_is_checker_imaged_ || resource_);
return resource_is_checker_imaged_;
}
void SetSolidColorForTesting(SkColor4f color) { set_solid_color(color); }
void AsValueInto(base::trace_event::TracedValue* state) const;
private:
friend class Tile;
friend class TileManager;
void SetResource(ResourcePool::InUsePoolResource resource,
bool resource_is_checker_imaged);
ResourcePool::InUsePoolResource TakeResource();
void set_resource_ready_for_draw() {
is_resource_ready_to_draw_ = true;
}
void set_solid_color(const SkColor4f& color) {
DCHECK(!resource_);
mode_ = SOLID_COLOR_MODE;
solid_color_ = color;
}
void set_oom() { mode_ = OOM_MODE; }
Mode mode_ = RESOURCE_MODE;
SkColor4f solid_color_ = SkColors::kWhite;
ResourcePool::InUsePoolResource resource_;
bool is_resource_ready_to_draw_ = false;
// Set to true if |resource_| was rasterized with checker-imaged content. The
// flag can only be true iff we have a valid |resource_|.
bool resource_is_checker_imaged_ = false;
};
} // namespace cc
#endif // CC_TILES_TILE_DRAW_INFO_H_
|