diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/platform/SharedBufferTest.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/platform/SharedBufferTest.cpp | 116 |
1 files changed, 50 insertions, 66 deletions
diff --git a/chromium/third_party/WebKit/Source/platform/SharedBufferTest.cpp b/chromium/third_party/WebKit/Source/platform/SharedBufferTest.cpp index 27797825910..005cbba043a 100644 --- a/chromium/third_party/WebKit/Source/platform/SharedBufferTest.cpp +++ b/chromium/third_party/WebKit/Source/platform/SharedBufferTest.cpp @@ -30,7 +30,12 @@ #include "config.h" +#include <algorithm> +#include <cstdlib> + #include "platform/SharedBuffer.h" +#include "platform/TestingPlatformSupport.h" +#include "public/platform/WebDiscardableMemory.h" #include "wtf/ArrayBuffer.h" #include "wtf/RefPtr.h" @@ -58,48 +63,6 @@ TEST(SharedBufferTest, getAsArrayBuffer) EXPECT_EQ(0, memcmp(expectedConcatenation, arrayBuffer->data(), strlen(expectedConcatenation))); } -TEST(SharedBufferTest, moveToAvoidsMemcpy) -{ - char testData[] = "Hello"; - - RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(testData, strlen(testData)); - - const char* originalData = sharedBuffer->data(); - const size_t originalSize = sharedBuffer->size(); - - Vector<char> result; - sharedBuffer->moveTo(result); - - EXPECT_TRUE(sharedBuffer->isEmpty()); - EXPECT_EQ(originalData, result.data()); - EXPECT_EQ(originalSize, result.size()); -} - -TEST(SharedBufferTest, moveToHandlesSegments) -{ - Vector<char> vector0(0x4000); - for (size_t i = 0; i < vector0.size(); ++i) - vector0[i] = 'a'; - Vector<char> vector1(0x4000); - for (size_t i = 0; i < vector1.size(); ++i) - vector1[i] = 'b'; - Vector<char> vector2(0x4000); - for (size_t i = 0; i < vector2.size(); ++i) - vector2[i] = 'c'; - - RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::adoptVector(vector0); - sharedBuffer->append(vector1); - sharedBuffer->append(vector2); - - const size_t originalSize = sharedBuffer->size(); - - Vector<char> result; - sharedBuffer->moveTo(result); - - EXPECT_TRUE(sharedBuffer->isEmpty()); - EXPECT_EQ(originalSize, result.size()); -} - TEST(SharedBufferTest, getAsArrayBufferLargeSegments) { Vector<char> vector0(0x4000); @@ -136,29 +99,14 @@ TEST(SharedBufferTest, getAsArrayBufferLargeSegments) TEST(SharedBufferTest, copy) { - char testData[] = "Habitasse integer eros tincidunt a scelerisque! Enim elit? Scelerisque magnis," - "et montes ultrices tristique a! Pid. Velit turpis, dapibus integer rhoncus sociis amet facilisis," - "adipiscing pulvinar nascetur magnis tempor sit pulvinar, massa urna enim porttitor sociis sociis proin enim?" - "Lectus, platea dolor, integer a. A habitasse hac nunc, nunc, nec placerat vut in sit nunc nec, sed. Sociis," - "vut! Hac, velit rhoncus facilisis. Rhoncus et, enim, sed et in tristique nunc montes," - "natoque nunc sagittis elementum parturient placerat dolor integer? Pulvinar," - "magnis dignissim porttitor ac pulvinar mid tempor. A risus sed mid! Magnis elit duis urna," - "cras massa, magna duis. Vut magnis pid a! Penatibus aliquet porttitor nunc, adipiscing massa odio lundium," - "risus elementum ac turpis massa pellentesque parturient augue. Purus amet turpis pid aliquam?" - "Dolor est tincidunt? Dolor? Dignissim porttitor sit in aliquam! Tincidunt, non nunc, rhoncus dictumst!" - "Porta augue etiam. Cursus augue nunc lacus scelerisque. Rhoncus lectus, integer hac, nec pulvinar augue massa," - "integer amet nisi facilisis? A! A, enim velit pulvinar elit in non scelerisque in et ultricies amet est!" - "in porttitor montes lorem et, hac aliquet pellentesque a sed? Augue mid purus ridiculus vel dapibus," - "sagittis sed, tortor auctor nascetur rhoncus nec, rhoncus, magna integer. Sit eu massa vut?" - "Porta augue porttitor elementum, enim, rhoncus pulvinar duis integer scelerisque rhoncus natoque," - "mattis dignissim massa ac pulvinar urna, nunc ut. Sagittis, aliquet penatibus proin lorem, pulvinar lectus," - "augue proin! Ac, arcu quis. Placerat habitasse, ridiculus ridiculus."; - - unsigned length = strlen(testData); - RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(testData, length); - sharedBuffer->append(testData, length); - sharedBuffer->append(testData, length); - sharedBuffer->append(testData, length); + Vector<char> testData(10000); + std::generate(testData.begin(), testData.end(), &std::rand); + + unsigned length = testData.size(); + RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(testData.data(), length); + sharedBuffer->append(testData.data(), length); + sharedBuffer->append(testData.data(), length); + sharedBuffer->append(testData.data(), length); // sharedBuffer must contain data more than segmentSize (= 0x1000) to check copy(). ASSERT_EQ(length * 4, sharedBuffer->size()); @@ -166,8 +114,44 @@ TEST(SharedBufferTest, copy) ASSERT_EQ(length * 4, clone->size()); ASSERT_EQ(0, memcmp(clone->data(), sharedBuffer->data(), clone->size())); - clone->append(testData, length); + clone->append(testData.data(), length); ASSERT_EQ(length * 5, clone->size()); } +TEST(SharedBufferTest, constructorWithSizeOnly) +{ + unsigned length = 10000; + RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(length); + ASSERT_EQ(length, sharedBuffer->size()); + + // The internal flat buffer should have been resized to |length| therefore getSomeData() should + // directly return the full size. + const char* data; + ASSERT_EQ(length, sharedBuffer->getSomeData(data, 0)); +} + +TEST(SharedBufferTest, createPurgeable) +{ + Vector<char> testData(30000); + std::generate(testData.begin(), testData.end(), &std::rand); + + TestingPlatformSupport::Config config; + config.hasDiscardableMemorySupport = true; + TestingPlatformSupport platformWithDiscardableMemorySupport(config); + + unsigned length = testData.size(); + RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::createPurgeable(testData.data(), length); + ASSERT_EQ(length, sharedBuffer->size()); + // Merge the segments into a single vector. + const char* data = sharedBuffer->data(); + ASSERT_EQ(0, memcmp(data, testData.data(), length)); + + // Do another append + merge the segments again. + size_t previousTestDataSize = testData.size(); + testData.resize(2 * previousTestDataSize); + std::generate(testData.begin() + previousTestDataSize, testData.end(), &std::rand); + sharedBuffer->append(testData.data() + previousTestDataSize, previousTestDataSize); + ASSERT_EQ(0, memcmp(data, testData.data(), length)); +} + } // namespace |