Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Side by Side Diff: skia/sgl/SkMask.cpp

Issue 93093: Implement canvas's globalCompositeOperation lighter properly.... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « skia/sgl/SkDraw.cpp ('k') | skia/sgl/SkXfermode.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* libs/graphics/sgl/SkMask.cpp 1 /* libs/graphics/sgl/SkMask.cpp
2 ** 2 **
3 ** Copyright 2007, The Android Open Source Project 3 ** Copyright 2007, The Android Open Source Project
4 ** 4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License"); 5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License. 6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at 7 ** You may obtain a copy of the License at
8 ** 8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0 9 ** http://www.apache.org/licenses/LICENSE-2.0
10 ** 10 **
11 ** Unless required by applicable law or agreed to in writing, software 11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS, 12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and 14 ** See the License for the specific language governing permissions and
15 ** limitations under the License. 15 ** limitations under the License.
16 */ 16 */
17 17
18 #include <limits> 18 #include "Sk64.h"
19
20 #include "SkMask.h" 19 #include "SkMask.h"
21 20
22 size_t SkMask::computeImageSize() const 21 /** returns the product if it is positive and fits in 31 bits. Otherwise this
23 { 22 returns 0.
24 // Prevent too large a number. There is a better fix for this in Skia 23 */
25 // trunk where it returns failure. 24 static int32_t safeMul32(int32_t a, int32_t b) {
26 long long size = (long long)fBounds.height() * (long long)fRowBytes; 25 Sk64 size;
27 if (size >= std::numeric_limits<size_t>::max() / 2) { 26 size.setMul(a, b);
28 #ifdef WIN32 27 if (size.is32() && size.isPos()) {
29 __debugbreak(); 28 return size.get32();
30 #else
31 abort();
32 #endif
33 } 29 }
34 30 return 0;
35 return size;
36 } 31 }
37 32
38 size_t SkMask::computeTotalImageSize() const 33 size_t SkMask::computeImageSize() const {
39 { 34 return safeMul32(fBounds.height(), fRowBytes);
35 }
36
37 size_t SkMask::computeTotalImageSize() const {
40 size_t size = this->computeImageSize(); 38 size_t size = this->computeImageSize();
41
42 if (fFormat == SkMask::k3D_Format) { 39 if (fFormat == SkMask::k3D_Format) {
43 // See computeImageSize for why we want to stop here. 40 size = safeMul32(size, 3);
44 if (size > std::numeric_limits<size_t>::max() / 3) {
45 #ifdef WIN32
46 __debugbreak();
47 #else
48 abort();
49 #endif
50 }
51
52 size *= 3;
53 } 41 }
54 return size; 42 return size;
55 } 43 }
56 44
57 /** We explicitly use this allocator for SkBimap pixels, so that we can 45 /** We explicitly use this allocator for SkBimap pixels, so that we can
58 freely assign memory allocated by one class to the other. 46 freely assign memory allocated by one class to the other.
59 */ 47 */
60 uint8_t* SkMask::AllocImage(size_t size) 48 uint8_t* SkMask::AllocImage(size_t size)
61 { 49 {
62 return (uint8_t*)sk_malloc_throw(SkAlign4(size)); 50 return (uint8_t*)sk_malloc_throw(SkAlign4(size));
63 } 51 }
64 52
65 /** We explicitly use this allocator for SkBimap pixels, so that we can 53 /** We explicitly use this allocator for SkBimap pixels, so that we can
66 freely assign memory allocated by one class to the other. 54 freely assign memory allocated by one class to the other.
67 */ 55 */
68 void SkMask::FreeImage(void* image) 56 void SkMask::FreeImage(void* image)
69 { 57 {
70 sk_free(image); 58 sk_free(image);
71 } 59 }
72 60
OLDNEW
« no previous file with comments | « skia/sgl/SkDraw.cpp ('k') | skia/sgl/SkXfermode.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698