| OLD | NEW |
| 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> |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 EXPECT_EQ(entry2, | 252 EXPECT_EQ(entry2, |
| 253 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); | 253 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); |
| 254 | 254 |
| 255 // Evict |entry2|. Queries by its name & value are not found. | 255 // Evict |entry2|. Queries by its name & value are not found. |
| 256 peer_.Evict(1); | 256 peer_.Evict(1); |
| 257 EXPECT_EQ(NULL, | 257 EXPECT_EQ(NULL, |
| 258 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); | 258 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); |
| 259 } | 259 } |
| 260 | 260 |
| 261 TEST_F(HpackHeaderTableTest, SetSizes) { | 261 TEST_F(HpackHeaderTableTest, SetSizes) { |
| 262 FLAGS_chromium_reloadable_flag_increase_hpack_table_size = true; | |
| 263 string key = "key", value = "value"; | 262 string key = "key", value = "value"; |
| 264 const HpackEntry* entry1 = table_.TryAddEntry(key, value); | 263 const HpackEntry* entry1 = table_.TryAddEntry(key, value); |
| 265 const HpackEntry* entry2 = table_.TryAddEntry(key, value); | 264 const HpackEntry* entry2 = table_.TryAddEntry(key, value); |
| 266 const HpackEntry* entry3 = table_.TryAddEntry(key, value); | 265 const HpackEntry* entry3 = table_.TryAddEntry(key, value); |
| 267 | 266 |
| 268 // Set exactly large enough. No Evictions. | 267 // Set exactly large enough. No Evictions. |
| 269 size_t max_size = entry1->Size() + entry2->Size() + entry3->Size(); | 268 size_t max_size = entry1->Size() + entry2->Size() + entry3->Size(); |
| 270 table_.SetMaxSize(max_size); | 269 table_.SetMaxSize(max_size); |
| 271 EXPECT_EQ(3u, peer_.dynamic_entries().size()); | 270 EXPECT_EQ(3u, peer_.dynamic_entries().size()); |
| 272 | 271 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 284 | 283 |
| 285 // SETTINGS_HEADER_TABLE_SIZE upper-bounds |table_.max_size()|, | 284 // SETTINGS_HEADER_TABLE_SIZE upper-bounds |table_.max_size()|, |
| 286 // and will force evictions. | 285 // and will force evictions. |
| 287 max_size = entry3->Size() - 1; | 286 max_size = entry3->Size() - 1; |
| 288 table_.SetSettingsHeaderTableSize(max_size); | 287 table_.SetSettingsHeaderTableSize(max_size); |
| 289 EXPECT_EQ(max_size, table_.max_size()); | 288 EXPECT_EQ(max_size, table_.max_size()); |
| 290 EXPECT_EQ(max_size, table_.settings_size_bound()); | 289 EXPECT_EQ(max_size, table_.settings_size_bound()); |
| 291 EXPECT_EQ(0u, peer_.dynamic_entries().size()); | 290 EXPECT_EQ(0u, peer_.dynamic_entries().size()); |
| 292 } | 291 } |
| 293 | 292 |
| 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); | |
| 300 const HpackEntry* entry3 = table_.TryAddEntry(key, value); | |
| 301 | |
| 302 // Set exactly large enough. No Evictions. | |
| 303 size_t max_size = entry1->Size() + entry2->Size() + entry3->Size(); | |
| 304 table_.SetMaxSize(max_size); | |
| 305 EXPECT_EQ(3u, peer_.dynamic_entries().size()); | |
| 306 | |
| 307 // Set just too small. One eviction. | |
| 308 max_size = entry1->Size() + entry2->Size() + entry3->Size() - 1; | |
| 309 table_.SetMaxSize(max_size); | |
| 310 EXPECT_EQ(2u, peer_.dynamic_entries().size()); | |
| 311 | |
| 312 // Changing SETTINGS_HEADER_TABLE_SIZE doesn't affect table_.max_size(), | |
| 313 // iff SETTINGS_HEADER_TABLE_SIZE >= |max_size|. | |
| 314 EXPECT_EQ(kDefaultHeaderTableSizeSetting, table_.settings_size_bound()); | |
| 315 table_.SetSettingsHeaderTableSize(kDefaultHeaderTableSizeSetting * 2); | |
| 316 EXPECT_EQ(max_size, table_.max_size()); | |
| 317 table_.SetSettingsHeaderTableSize(max_size + 1); | |
| 318 EXPECT_EQ(max_size, table_.max_size()); | |
| 319 EXPECT_EQ(2u, peer_.dynamic_entries().size()); | |
| 320 | |
| 321 // SETTINGS_HEADER_TABLE_SIZE upper-bounds |table_.max_size()|, | |
| 322 // and will force evictions. | |
| 323 max_size = entry3->Size() - 1; | |
| 324 table_.SetSettingsHeaderTableSize(max_size); | |
| 325 EXPECT_EQ(max_size, table_.max_size()); | |
| 326 EXPECT_EQ(max_size, table_.settings_size_bound()); | |
| 327 EXPECT_EQ(0u, peer_.dynamic_entries().size()); | |
| 328 } | |
| 329 | |
| 330 TEST_F(HpackHeaderTableTest, EvictionCountForEntry) { | 293 TEST_F(HpackHeaderTableTest, EvictionCountForEntry) { |
| 331 string key = "key", value = "value"; | 294 string key = "key", value = "value"; |
| 332 const HpackEntry* entry1 = table_.TryAddEntry(key, value); | 295 const HpackEntry* entry1 = table_.TryAddEntry(key, value); |
| 333 const HpackEntry* entry2 = table_.TryAddEntry(key, value); | 296 const HpackEntry* entry2 = table_.TryAddEntry(key, value); |
| 334 size_t entry3_size = HpackEntry::Size(key, value); | 297 size_t entry3_size = HpackEntry::Size(key, value); |
| 335 | 298 |
| 336 // Just enough capacity for third entry. | 299 // Just enough capacity for third entry. |
| 337 table_.SetMaxSize(entry1->Size() + entry2->Size() + entry3_size); | 300 table_.SetMaxSize(entry1->Size() + entry2->Size() + entry3_size); |
| 338 EXPECT_EQ(0u, peer_.EvictionCountForEntry(key, value)); | 301 EXPECT_EQ(0u, peer_.EvictionCountForEntry(key, value)); |
| 339 EXPECT_EQ(1u, peer_.EvictionCountForEntry(key, value + "x")); | 302 EXPECT_EQ(1u, peer_.EvictionCountForEntry(key, value + "x")); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 HpackHeaderTable::EntryHasher hasher; | 440 HpackHeaderTable::EntryHasher hasher; |
| 478 EXPECT_EQ(hasher(&entry1), hasher(&entry2)); | 441 EXPECT_EQ(hasher(&entry1), hasher(&entry2)); |
| 479 | 442 |
| 480 HpackHeaderTable::EntriesEq eq; | 443 HpackHeaderTable::EntriesEq eq; |
| 481 EXPECT_TRUE(eq(&entry1, &entry2)); | 444 EXPECT_TRUE(eq(&entry1, &entry2)); |
| 482 } | 445 } |
| 483 | 446 |
| 484 } // namespace | 447 } // namespace |
| 485 | 448 |
| 486 } // namespace net | 449 } // namespace net |
| OLD | NEW |