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

Side by Side Diff: pdf/chunk_stream_unittest.cc

Issue 2349753003: Improve linearized pdf load/show time. (Closed)
Patch Set: Fix heap use after free. Created 4 years, 2 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
(Empty)
1 // Copyright (c) 2016 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.
4
5 #include "pdf/chunk_stream.h"
6
7 #include <array>
8 #include <memory>
9
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace chrome_pdf {
13 namespace {
14 typedef ChunkStream<10> TestChunkStream;
15 std::unique_ptr<TestChunkStream::ChunkData> CreateChunkData() {
16 return std::unique_ptr<TestChunkStream::ChunkData>(
17 new TestChunkStream::ChunkData());
18 }
19 }
20
21 TEST(ChunkStreamTest, InRow) {
22 TestChunkStream stream;
23 EXPECT_FALSE(stream.IsComplete());
24 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 10)));
25 stream.SetChunkData(0, CreateChunkData());
26 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 10)));
27 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 20)));
28 stream.SetChunkData(1, CreateChunkData());
29 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 20)));
30 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 30)));
31 stream.SetChunkData(2, CreateChunkData());
32 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 30)));
33 stream.set_eof_pos(25);
34 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 30)));
35 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 25)));
36 EXPECT_TRUE(stream.IsComplete());
37 }
38
39 TEST(ChunkStreamTest, InBackRow) {
40 TestChunkStream stream;
41 stream.set_eof_pos(25);
42 EXPECT_FALSE(stream.IsComplete());
43 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(20, 25)));
44 stream.SetChunkData(2, CreateChunkData());
45 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(20, 25)));
46 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(10, 20)));
47 stream.SetChunkData(1, CreateChunkData());
48 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(10, 20)));
49 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 10)));
50 stream.SetChunkData(0, CreateChunkData());
51 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 10)));
52 EXPECT_TRUE(stream.IsComplete());
53 }
54
55 TEST(ChunkStreamTest, FillGap) {
56 TestChunkStream stream;
57 stream.set_eof_pos(25);
58 EXPECT_FALSE(stream.IsComplete());
59 stream.SetChunkData(0, CreateChunkData());
60 stream.SetChunkData(2, CreateChunkData());
61 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 10)));
62 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(20, 25)));
63 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 25)));
64 stream.SetChunkData(1, CreateChunkData());
65 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 25)));
66 EXPECT_TRUE(stream.IsComplete());
67 }
68
69 TEST(ChunkStreamTest, Read) {
70 TestChunkStream stream;
71 stream.set_eof_pos(25);
72 const unsigned char start_value = 33;
73 unsigned char value = start_value;
74 auto chunk_0 = CreateChunkData();
75 for (auto& it : *chunk_0) {
76 it = ++value;
77 }
78 auto chunk_1 = CreateChunkData();
79 for (auto& it : *chunk_1) {
80 it = ++value;
81 }
82 auto chunk_2 = CreateChunkData();
83 for (auto& it : *chunk_2) {
84 it = ++value;
85 }
86 stream.SetChunkData(0, std::move(chunk_0));
87 stream.SetChunkData(2, std::move(chunk_2));
88 stream.SetChunkData(1, std::move(chunk_1));
89
90 std::array<unsigned char, 25> result_data;
91 EXPECT_TRUE(stream.ReadData(gfx::Range(0, 25), result_data.data()));
92
93 value = start_value;
94 for (const auto& it : result_data) {
95 EXPECT_EQ(++value, it);
96 }
97 }
98 } // namespace chrome_pdf
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698