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

Side by Side Diff: third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReaderTest.cpp

Issue 1812273003: Eliminate copies of encoded image data (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2015 Google Inc. All rights reserved. 2 * Copyright (C) 2015 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * 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 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 11 matching lines...) Expand all
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "platform/image-decoders/FastSharedBufferReader.h" 31 #include "platform/image-decoders/FastSharedBufferReader.h"
32 #include "platform/image-decoders/SharedBufferSegmentReader.h"
32 33
33 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
34 35
35 namespace blink { 36 namespace blink {
36 37
37 namespace { 38 namespace {
38 39
39 const unsigned kDefaultTestSize = 4 * SharedBuffer::kSegmentSize; 40 const unsigned kDefaultTestSize = 4 * SharedBuffer::kSegmentSize;
40 41
41 void prepareReferenceData(char* buffer, size_t size) 42 void prepareReferenceData(char* buffer, size_t size)
42 { 43 {
43 for (size_t i = 0; i < size; ++i) 44 for (size_t i = 0; i < size; ++i)
44 buffer[i] = static_cast<char>(i); 45 buffer[i] = static_cast<char>(i);
45 } 46 }
46 47
47 } // namespace 48 } // namespace
48 49
49 TEST(FastSharedBufferReaderTest, nonSequentialReads) 50 TEST(FastSharedBufferReaderTest, nonSequentialReads)
50 { 51 {
51 char referenceData[kDefaultTestSize]; 52 char referenceData[kDefaultTestSize];
52 prepareReferenceData(referenceData, sizeof(referenceData)); 53 prepareReferenceData(referenceData, sizeof(referenceData));
53 RefPtr<SharedBuffer> data = SharedBuffer::create(); 54 RefPtr<SharedBuffer> data = SharedBuffer::create();
54 data->append(referenceData, sizeof(referenceData)); 55 data->append(referenceData, sizeof(referenceData));
55 56
56 FastSharedBufferReader reader(data); 57 RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferS egmentReader(data));
58 FastSharedBufferReader reader(segmentReader);
Peter Kasting 2016/03/23 02:42:58 This pattern happening repeatedly makes me wonder
f(malita) 2016/03/23 16:41:58 nit: segmentReader.release() (here and below)
scroggo_chromium 2016/03/24 13:59:45 The typical caller (outside of tests) already has
scroggo_chromium 2016/03/24 13:59:45 Done.
Peter Kasting 2016/03/24 22:05:43 Up to you. I'm not opposed to another constructor
scroggo_chromium 2016/03/25 01:05:10 Acknowledged. Left out the constructor for now.
57 59
58 // Read size is prime such there will be a segment-spanning 60 // Read size is prime such there will be a segment-spanning
59 // read eventually. 61 // read eventually.
60 char tempBuffer[17]; 62 char tempBuffer[17];
61 for (size_t dataPosition = 0; dataPosition + sizeof(tempBuffer) < sizeof(ref erenceData); dataPosition += sizeof(tempBuffer)) { 63 for (size_t dataPosition = 0; dataPosition + sizeof(tempBuffer) < sizeof(ref erenceData); dataPosition += sizeof(tempBuffer)) {
62 const char* block = reader.getConsecutiveData( 64 const char* block = reader.getConsecutiveData(
63 dataPosition, sizeof(tempBuffer), tempBuffer); 65 dataPosition, sizeof(tempBuffer), tempBuffer);
64 ASSERT_FALSE(memcmp(block, referenceData + dataPosition, sizeof(tempBuff er))); 66 ASSERT_FALSE(memcmp(block, referenceData + dataPosition, sizeof(tempBuff er)));
65 } 67 }
66 } 68 }
67 69
68 TEST(FastSharedBufferReaderTest, readBackwards) 70 TEST(FastSharedBufferReaderTest, readBackwards)
69 { 71 {
70 char referenceData[kDefaultTestSize]; 72 char referenceData[kDefaultTestSize];
71 prepareReferenceData(referenceData, sizeof(referenceData)); 73 prepareReferenceData(referenceData, sizeof(referenceData));
72 RefPtr<SharedBuffer> data = SharedBuffer::create(); 74 RefPtr<SharedBuffer> data = SharedBuffer::create();
73 data->append(referenceData, sizeof(referenceData)); 75 data->append(referenceData, sizeof(referenceData));
74 76
75 FastSharedBufferReader reader(data); 77 RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferS egmentReader(data));
78 FastSharedBufferReader reader(segmentReader);
76 79
77 // Read size is prime such there will be a segment-spanning 80 // Read size is prime such there will be a segment-spanning
78 // read eventually. 81 // read eventually.
79 char tempBuffer[17]; 82 char tempBuffer[17];
80 for (size_t dataOffset = sizeof(tempBuffer); dataOffset < sizeof(referenceDa ta); dataOffset += sizeof(tempBuffer)) { 83 for (size_t dataOffset = sizeof(tempBuffer); dataOffset < sizeof(referenceDa ta); dataOffset += sizeof(tempBuffer)) {
81 const char* block = reader.getConsecutiveData( 84 const char* block = reader.getConsecutiveData(
82 sizeof(referenceData) - dataOffset, sizeof(tempBuffer), tempBuffer); 85 sizeof(referenceData) - dataOffset, sizeof(tempBuffer), tempBuffer);
83 ASSERT_FALSE(memcmp(block, referenceData + sizeof(referenceData) - dataO ffset, sizeof(tempBuffer))); 86 ASSERT_FALSE(memcmp(block, referenceData + sizeof(referenceData) - dataO ffset, sizeof(tempBuffer)));
84 } 87 }
85 } 88 }
86 89
87 TEST(FastSharedBufferReaderTest, byteByByte) 90 TEST(FastSharedBufferReaderTest, byteByByte)
88 { 91 {
89 char referenceData[kDefaultTestSize]; 92 char referenceData[kDefaultTestSize];
90 prepareReferenceData(referenceData, sizeof(referenceData)); 93 prepareReferenceData(referenceData, sizeof(referenceData));
91 RefPtr<SharedBuffer> data = SharedBuffer::create(); 94 RefPtr<SharedBuffer> data = SharedBuffer::create();
92 data->append(referenceData, sizeof(referenceData)); 95 data->append(referenceData, sizeof(referenceData));
93 96
94 FastSharedBufferReader reader(data); 97 RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferS egmentReader(data));
98 FastSharedBufferReader reader(segmentReader);
95 for (size_t i = 0; i < sizeof(referenceData); ++i) { 99 for (size_t i = 0; i < sizeof(referenceData); ++i) {
96 ASSERT_EQ(referenceData[i], reader.getOneByte(i)); 100 ASSERT_EQ(referenceData[i], reader.getOneByte(i));
97 } 101 }
98 } 102 }
99 103
100 // Tests that a read from inside the penultimate segment to the very end of the 104 // Tests that a read from inside the penultimate segment to the very end of the
101 // buffer doesn't try to read off the end of the buffer. 105 // buffer doesn't try to read off the end of the buffer.
102 TEST(FastSharedBufferReaderTest, readAllOverlappingLastSegmentBoundary) 106 TEST(FastSharedBufferReaderTest, readAllOverlappingLastSegmentBoundary)
103 { 107 {
104 const unsigned dataSize = 2 * SharedBuffer::kSegmentSize; 108 const unsigned dataSize = 2 * SharedBuffer::kSegmentSize;
105 char referenceData[dataSize]; 109 char referenceData[dataSize];
106 prepareReferenceData(referenceData, dataSize); 110 prepareReferenceData(referenceData, dataSize);
107 RefPtr<SharedBuffer> data = SharedBuffer::create(); 111 RefPtr<SharedBuffer> data = SharedBuffer::create();
108 data->append(referenceData, dataSize); 112 data->append(referenceData, dataSize);
109 113
114 RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferS egmentReader(data));
110 char buffer[dataSize]; 115 char buffer[dataSize];
111 FastSharedBufferReader reader(data); 116 FastSharedBufferReader reader(segmentReader);
112 reader.getConsecutiveData(0, dataSize, buffer); 117 reader.getConsecutiveData(0, dataSize, buffer);
113 118
114 ASSERT_FALSE(memcmp(buffer, referenceData, dataSize)); 119 ASSERT_FALSE(memcmp(buffer, referenceData, dataSize));
115 } 120 }
116 121
117 } // namespace blink 122 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698