scheduler: Increase work batch size to 4
[chromium-blink-merge.git] / cc / resources / resource.h
blobf9138fbb876ef405c8afada390cf4031f92f4b92
1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CC_RESOURCES_RESOURCE_H_
6 #define CC_RESOURCES_RESOURCE_H_
8 #include "base/numerics/safe_math.h"
9 #include "cc/base/cc_export.h"
10 #include "cc/resources/resource_provider.h"
11 #include "ui/gfx/geometry/size.h"
13 namespace cc {
15 class CC_EXPORT Resource {
16 public:
17 Resource() : id_(0), format_(RGBA_8888) {}
18 Resource(unsigned id, const gfx::Size& size, ResourceFormat format)
19 : id_(id),
20 size_(size),
21 format_(format) {}
23 ResourceId id() const { return id_; }
24 gfx::Size size() const { return size_; }
25 ResourceFormat format() const { return format_; }
27 // Return true if the call to UncheckedMemorySizeBytes would return a value
28 // that fits in a size_t.
29 static bool VerifySizeInBytes(const gfx::Size& size, ResourceFormat format) {
30 base::CheckedNumeric<size_t> checked_value = BitsPerPixel(format);
31 checked_value *= size.width();
32 checked_value *= size.height();
33 if (!checked_value.IsValid())
34 return false;
35 size_t value = checked_value.ValueOrDie();
36 if ((value % 8) != 0)
37 return false;
38 return true;
41 static size_t CheckedMemorySizeBytes(const gfx::Size& size,
42 ResourceFormat format) {
43 DCHECK(VerifySizeInBytes(size, format));
44 base::CheckedNumeric<size_t> checked_value = BitsPerPixel(format);
45 checked_value *= size.width();
46 checked_value *= size.height();
47 checked_value /= 8;
48 return checked_value.ValueOrDie();
51 inline static size_t UncheckedMemorySizeBytes(const gfx::Size& size,
52 ResourceFormat format) {
53 DCHECK(VerifySizeInBytes(size, format));
54 return static_cast<size_t>(BitsPerPixel(format)) * size.width() *
55 size.height() / 8;
58 protected:
59 void set_id(ResourceId id) { id_ = id; }
60 void set_dimensions(const gfx::Size& size, ResourceFormat format) {
61 size_ = size;
62 format_ = format;
65 private:
66 ResourceId id_;
67 gfx::Size size_;
68 ResourceFormat format_;
70 DISALLOW_COPY_AND_ASSIGN(Resource);
73 } // namespace cc
75 #endif // CC_RESOURCES_RESOURCE_H_