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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp

Issue 2578803002: Remove full-size bitmap copy on SkImage::scalePixels->IFG::decodeAndScale
Patch Set: Created 4 years 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
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 133
134 char buffer[100 * 100 * 4]; 134 char buffer[100 * 100 * 4];
135 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), 135 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(),
136 buffer, 100 * 4); 136 buffer, 100 * 4);
137 EXPECT_EQ(1, m_decodeRequestCount); 137 EXPECT_EQ(1, m_decodeRequestCount);
138 138
139 addNewData(); 139 addNewData();
140 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), 140 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(),
141 buffer, 100 * 4); 141 buffer, 100 * 4);
142 EXPECT_EQ(2, m_decodeRequestCount); 142 EXPECT_EQ(2, m_decodeRequestCount);
143
143 EXPECT_EQ(0, m_decodersDestroyed); 144 EXPECT_EQ(0, m_decodersDestroyed);
144 } 145 }
145 146
146 TEST_F(ImageFrameGeneratorTest, incompleteDecodeBecomesComplete) { 147 TEST_F(ImageFrameGeneratorTest, incompleteDecodeBecomesComplete) {
147 setFrameStatus(ImageFrame::FramePartial); 148 setFrameStatus(ImageFrame::FramePartial);
148 149
149 char buffer[100 * 100 * 4]; 150 char buffer[100 * 100 * 4];
150 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), 151 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(),
151 buffer, 100 * 4); 152 buffer, 100 * 4);
152 EXPECT_EQ(1, m_decodeRequestCount); 153 EXPECT_EQ(1, m_decodeRequestCount);
153 EXPECT_EQ(0, m_decodersDestroyed); 154 EXPECT_EQ(0, m_decodersDestroyed);
154 155
155 setFrameStatus(ImageFrame::FrameComplete); 156 setFrameStatus(ImageFrame::FrameComplete);
156 addNewData(); 157 addNewData();
157 158
158 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), 159 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(),
159 buffer, 100 * 4); 160 buffer, 100 * 4);
160 EXPECT_EQ(2, m_decodeRequestCount); 161 EXPECT_EQ(2, m_decodeRequestCount);
161 EXPECT_EQ(1, m_decodersDestroyed); 162 EXPECT_EQ(1, m_decodersDestroyed);
162 163
163 // Decoder created again. 164 // Decoder created again.
164 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), 165 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(),
165 buffer, 100 * 4); 166 buffer, 100 * 4);
166 EXPECT_EQ(3, m_decodeRequestCount); 167 EXPECT_EQ(3, m_decodeRequestCount);
167 } 168 }
168 169
170 TEST_F(ImageFrameGeneratorTest, scaleAfterDecode) {
171 setFrameStatus(ImageFrame::FramePartial);
172
173 char scaledBuffer[30 * 30 * 4];
174 m_generator->decodeAndScale(m_segmentReader.get(), false, 0,
175 imageInfo().makeWH(30, 30), scaledBuffer, 30 * 4);
176 EXPECT_EQ(1, m_decodeRequestCount);
177
178 char buffer[100 * 100 * 4];
179 addNewData();
180 m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(),
181 buffer, 100 * 4);
182 EXPECT_EQ(2, m_decodeRequestCount);
183
184 char scaledBuffer1[45 * 48 * 4];
185 addNewData();
186 m_generator->decodeAndScale(m_segmentReader.get(), false, 0,
187 imageInfo().makeWH(45, 45), scaledBuffer1,
188 48 * 4);
189 EXPECT_EQ(3, m_decodeRequestCount);
190 EXPECT_EQ(0, m_decodersDestroyed);
191
192 setFrameStatus(ImageFrame::FrameComplete);
193 addNewData();
194
195 m_generator->decodeAndScale(m_segmentReader.get(), false, 0,
196 imageInfo().makeWH(30, 30), scaledBuffer, 30 * 4);
197 EXPECT_EQ(4, m_decodeRequestCount);
198 EXPECT_EQ(1, m_decodersDestroyed);
199 }
200
169 static void decodeThreadMain(ImageFrameGenerator* generator, 201 static void decodeThreadMain(ImageFrameGenerator* generator,
170 SegmentReader* segmentReader) { 202 SegmentReader* segmentReader) {
171 char buffer[100 * 100 * 4]; 203 char buffer[100 * 100 * 4];
172 generator->decodeAndScale(segmentReader, false, 0, imageInfo(), buffer, 204 generator->decodeAndScale(segmentReader, false, 0, imageInfo(), buffer,
173 100 * 4); 205 100 * 4);
174 } 206 }
175 207
176 TEST_F(ImageFrameGeneratorTest, incompleteDecodeBecomesCompleteMultiThreaded) { 208 TEST_F(ImageFrameGeneratorTest, incompleteDecodeBecomesCompleteMultiThreaded) {
177 setFrameStatus(ImageFrame::FramePartial); 209 setFrameStatus(ImageFrame::FramePartial);
178 210
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 // all the frame data, but not destroying the decoder. See comments in 286 // all the frame data, but not destroying the decoder. See comments in
255 // ImageFrameGenerator::tryToResumeDecode(). 287 // ImageFrameGenerator::tryToResumeDecode().
256 m_generator->decodeAndScale(m_segmentReader.get(), true, 2, imageInfo(), 288 m_generator->decodeAndScale(m_segmentReader.get(), true, 2, imageInfo(),
257 buffer, 100 * 4); 289 buffer, 100 * 4);
258 EXPECT_EQ(3, m_decodeRequestCount); 290 EXPECT_EQ(3, m_decodeRequestCount);
259 EXPECT_EQ(0, m_decodersDestroyed); 291 EXPECT_EQ(0, m_decodersDestroyed);
260 EXPECT_EQ(kNotFound, m_requestedClearExceptFrame); 292 EXPECT_EQ(kNotFound, m_requestedClearExceptFrame);
261 } 293 }
262 294
263 } // namespace blink 295 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698