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"
15 class CC_EXPORT Resource
{
17 Resource() : id_(0), format_(RGBA_8888
) {}
18 Resource(unsigned id
, const gfx::Size
& size
, ResourceFormat 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())
35 size_t value
= checked_value
.ValueOrDie();
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();
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() *
59 void set_id(ResourceId id
) { id_
= id
; }
60 void set_dimensions(const gfx::Size
& size
, ResourceFormat format
) {
68 ResourceFormat format_
;
70 DISALLOW_COPY_AND_ASSIGN(Resource
);
75 #endif // CC_RESOURCES_RESOURCE_H_