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

Side by Side Diff: net/spdy/hpack/hpack_header_table_test.cc

Issue 2348603003: Increase HPACK table size up to the optimal size if clients allow it. (Closed)
Patch Set: Created 4 years, 3 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/spdy/hpack/hpack_header_table.h" 5 #include "net/spdy/hpack/hpack_header_table.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "net/spdy/hpack/hpack_constants.h" 13 #include "net/spdy/hpack/hpack_constants.h"
14 #include "net/spdy/hpack/hpack_entry.h" 14 #include "net/spdy/hpack/hpack_entry.h"
15 #include "net/spdy/spdy_flags.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
17 namespace net { 18 namespace net {
18 19
19 using base::StringPiece; 20 using base::StringPiece;
20 using std::distance; 21 using std::distance;
21 using std::string; 22 using std::string;
22 23
23 namespace test { 24 namespace test {
24 25
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 EXPECT_EQ(entry2, 252 EXPECT_EQ(entry2,
252 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); 253 table_.GetByNameAndValue(first_static_entry->name(), "Value Four"));
253 254
254 // Evict |entry2|. Queries by its name & value are not found. 255 // Evict |entry2|. Queries by its name & value are not found.
255 peer_.Evict(1); 256 peer_.Evict(1);
256 EXPECT_EQ(NULL, 257 EXPECT_EQ(NULL,
257 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); 258 table_.GetByNameAndValue(first_static_entry->name(), "Value Four"));
258 } 259 }
259 260
260 TEST_F(HpackHeaderTableTest, SetSizes) { 261 TEST_F(HpackHeaderTableTest, SetSizes) {
262 FLAGS_chromium_reloadable_flag_increase_hpack_table_size = true;
261 string key = "key", value = "value"; 263 string key = "key", value = "value";
262 const HpackEntry* entry1 = table_.TryAddEntry(key, value); 264 const HpackEntry* entry1 = table_.TryAddEntry(key, value);
263 const HpackEntry* entry2 = table_.TryAddEntry(key, value); 265 const HpackEntry* entry2 = table_.TryAddEntry(key, value);
266 const HpackEntry* entry3 = table_.TryAddEntry(key, value);
267
268 // Set exactly large enough. No Evictions.
269 size_t max_size = entry1->Size() + entry2->Size() + entry3->Size();
270 table_.SetMaxSize(max_size);
271 EXPECT_EQ(3u, peer_.dynamic_entries().size());
272
273 // Set just too small. One eviction.
274 max_size = entry1->Size() + entry2->Size() + entry3->Size() - 1;
275 table_.SetMaxSize(max_size);
276 EXPECT_EQ(2u, peer_.dynamic_entries().size());
277
278 // Changing SETTINGS_HEADER_TABLE_SIZE.
279 EXPECT_EQ(kDefaultHeaderTableSizeSetting, table_.settings_size_bound());
280 // In production, the size passed to SetSettingsHeaderTableSize is never
281 // larger than table_.settings_size_bound().
282 table_.SetSettingsHeaderTableSize(kDefaultHeaderTableSizeSetting * 3 + 1);
283 EXPECT_EQ(kDefaultHeaderTableSizeSetting * 3 + 1, table_.max_size());
284
285 // SETTINGS_HEADER_TABLE_SIZE upper-bounds |table_.max_size()|,
286 // and will force evictions.
287 max_size = entry3->Size() - 1;
288 table_.SetSettingsHeaderTableSize(max_size);
289 EXPECT_EQ(max_size, table_.max_size());
290 EXPECT_EQ(max_size, table_.settings_size_bound());
291 EXPECT_EQ(0u, peer_.dynamic_entries().size());
292 }
293
294 TEST_F(HpackHeaderTableTest, SetSizesOld) {
295 FLAGS_chromium_reloadable_flag_increase_hpack_table_size = false;
296
297 string key = "key", value = "value";
298 const HpackEntry* entry1 = table_.TryAddEntry(key, value);
299 const HpackEntry* entry2 = table_.TryAddEntry(key, value);
264 const HpackEntry* entry3 = table_.TryAddEntry(key, value); 300 const HpackEntry* entry3 = table_.TryAddEntry(key, value);
265 301
266 // Set exactly large enough. No Evictions. 302 // Set exactly large enough. No Evictions.
267 size_t max_size = entry1->Size() + entry2->Size() + entry3->Size(); 303 size_t max_size = entry1->Size() + entry2->Size() + entry3->Size();
268 table_.SetMaxSize(max_size); 304 table_.SetMaxSize(max_size);
269 EXPECT_EQ(3u, peer_.dynamic_entries().size()); 305 EXPECT_EQ(3u, peer_.dynamic_entries().size());
270 306
271 // Set just too small. One eviction. 307 // Set just too small. One eviction.
272 max_size = entry1->Size() + entry2->Size() + entry3->Size() - 1; 308 max_size = entry1->Size() + entry2->Size() + entry3->Size() - 1;
273 table_.SetMaxSize(max_size); 309 table_.SetMaxSize(max_size);
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 HpackHeaderTable::EntryHasher hasher; 477 HpackHeaderTable::EntryHasher hasher;
442 EXPECT_EQ(hasher(&entry1), hasher(&entry2)); 478 EXPECT_EQ(hasher(&entry1), hasher(&entry2));
443 479
444 HpackHeaderTable::EntriesEq eq; 480 HpackHeaderTable::EntriesEq eq;
445 EXPECT_TRUE(eq(&entry1, &entry2)); 481 EXPECT_TRUE(eq(&entry1, &entry2));
446 } 482 }
447 483
448 } // namespace 484 } // namespace
449 485
450 } // namespace net 486 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698