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/quic/quic_http_stream_test.cc

Issue 2096713002: Reduce SpdyHeaderBlock copies with move semantics. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clear() does not work after all. Created 4 years, 5 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
« no previous file with comments | « net/quic/quic_http_stream.cc ('k') | net/quic/quic_network_transaction_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/quic/quic_http_stream.h" 5 #include "net/quic/quic_http_stream.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility>
10 11
11 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
12 #include "base/run_loop.h" 13 #include "base/run_loop.h"
13 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
14 #include "base/threading/thread_task_runner_handle.h" 15 #include "base/threading/thread_task_runner_handle.h"
15 #include "net/base/chunked_upload_data_stream.h" 16 #include "net/base/chunked_upload_data_stream.h"
16 #include "net/base/elements_upload_data_stream.h" 17 #include "net/base/elements_upload_data_stream.h"
17 #include "net/base/net_errors.h" 18 #include "net/base/net_errors.h"
18 #include "net/base/test_completion_callback.h" 19 #include "net/base/test_completion_callback.h"
19 #include "net/base/upload_bytes_element_reader.h" 20 #include "net/base/upload_bytes_element_reader.h"
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 QuicPacketNumber packet_number, 372 QuicPacketNumber packet_number,
372 QuicStreamId stream_id, 373 QuicStreamId stream_id,
373 bool should_include_version, 374 bool should_include_version,
374 bool fin, 375 bool fin,
375 RequestPriority request_priority, 376 RequestPriority request_priority,
376 size_t* spdy_headers_frame_length) { 377 size_t* spdy_headers_frame_length) {
377 SpdyPriority priority = 378 SpdyPriority priority =
378 ConvertRequestPriorityToQuicPriority(request_priority); 379 ConvertRequestPriorityToQuicPriority(request_priority);
379 return client_maker_.MakeRequestHeadersPacket( 380 return client_maker_.MakeRequestHeadersPacket(
380 packet_number, stream_id, should_include_version, fin, priority, 381 packet_number, stream_id, should_include_version, fin, priority,
381 request_headers_, spdy_headers_frame_length); 382 std::move(request_headers_), spdy_headers_frame_length);
382 } 383 }
383 384
384 std::unique_ptr<QuicReceivedPacket> ConstructRequestHeadersPacket( 385 std::unique_ptr<QuicReceivedPacket> ConstructRequestHeadersPacket(
385 QuicPacketNumber packet_number, 386 QuicPacketNumber packet_number,
386 bool fin, 387 bool fin,
387 RequestPriority request_priority, 388 RequestPriority request_priority,
388 size_t* spdy_headers_frame_length) { 389 size_t* spdy_headers_frame_length) {
389 return InnerConstructRequestHeadersPacket( 390 return InnerConstructRequestHeadersPacket(
390 packet_number, stream_id_, kIncludeVersion, fin, request_priority, 391 packet_number, stream_id_, kIncludeVersion, fin, request_priority,
391 spdy_headers_frame_length); 392 spdy_headers_frame_length);
392 } 393 }
393 394
394 std::unique_ptr<QuicReceivedPacket> InnerConstructResponseHeadersPacket( 395 std::unique_ptr<QuicReceivedPacket> InnerConstructResponseHeadersPacket(
395 QuicPacketNumber packet_number, 396 QuicPacketNumber packet_number,
396 QuicStreamId stream_id, 397 QuicStreamId stream_id,
397 bool fin, 398 bool fin,
398 size_t* spdy_headers_frame_length) { 399 size_t* spdy_headers_frame_length) {
399 return server_maker_.MakeResponseHeadersPacket( 400 return server_maker_.MakeResponseHeadersPacket(
400 packet_number, stream_id, !kIncludeVersion, fin, response_headers_, 401 packet_number, stream_id, !kIncludeVersion, fin,
401 spdy_headers_frame_length, &response_offset_); 402 std::move(response_headers_), spdy_headers_frame_length,
403 &response_offset_);
402 } 404 }
403 405
404 std::unique_ptr<QuicReceivedPacket> ConstructResponseHeadersPacket( 406 std::unique_ptr<QuicReceivedPacket> ConstructResponseHeadersPacket(
405 QuicPacketNumber packet_number, 407 QuicPacketNumber packet_number,
406 bool fin, 408 bool fin,
407 size_t* spdy_headers_frame_length) { 409 size_t* spdy_headers_frame_length) {
408 return InnerConstructResponseHeadersPacket(packet_number, stream_id_, fin, 410 return InnerConstructResponseHeadersPacket(packet_number, stream_id_, fin,
409 spdy_headers_frame_length); 411 spdy_headers_frame_length);
410 } 412 }
411 413
412 std::unique_ptr<QuicReceivedPacket> ConstructResponseHeadersPacketWithOffset( 414 std::unique_ptr<QuicReceivedPacket> ConstructResponseHeadersPacketWithOffset(
413 QuicPacketNumber packet_number, 415 QuicPacketNumber packet_number,
414 bool fin, 416 bool fin,
415 size_t* spdy_headers_frame_length, 417 size_t* spdy_headers_frame_length,
416 QuicStreamOffset* offset) { 418 QuicStreamOffset* offset) {
417 return server_maker_.MakeResponseHeadersPacket( 419 return server_maker_.MakeResponseHeadersPacket(
418 packet_number, stream_id_, !kIncludeVersion, fin, response_headers_, 420 packet_number, stream_id_, !kIncludeVersion, fin,
419 spdy_headers_frame_length, offset); 421 std::move(response_headers_), spdy_headers_frame_length, offset);
420 } 422 }
421 423
422 std::unique_ptr<QuicReceivedPacket> ConstructResponseTrailersPacket( 424 std::unique_ptr<QuicReceivedPacket> ConstructResponseTrailersPacket(
423 QuicPacketNumber packet_number, 425 QuicPacketNumber packet_number,
424 bool fin, 426 bool fin,
425 const SpdyHeaderBlock& trailers, 427 SpdyHeaderBlock trailers,
426 size_t* spdy_headers_frame_length, 428 size_t* spdy_headers_frame_length,
427 QuicStreamOffset* offset) { 429 QuicStreamOffset* offset) {
428 return server_maker_.MakeResponseHeadersPacket( 430 return server_maker_.MakeResponseHeadersPacket(
429 packet_number, stream_id_, !kIncludeVersion, fin, trailers, 431 packet_number, stream_id_, !kIncludeVersion, fin, std::move(trailers),
430 spdy_headers_frame_length, offset); 432 spdy_headers_frame_length, offset);
431 } 433 }
432 434
433 std::unique_ptr<QuicReceivedPacket> ConstructClientRstStreamPacket( 435 std::unique_ptr<QuicReceivedPacket> ConstructClientRstStreamPacket(
434 QuicPacketNumber packet_number) { 436 QuicPacketNumber packet_number) {
435 return client_maker_.MakeRstPacket( 437 return client_maker_.MakeRstPacket(
436 packet_number, true, stream_id_, 438 packet_number, true, stream_id_,
437 AdjustErrorForVersion(QUIC_RST_ACKNOWLEDGEMENT, GetParam())); 439 AdjustErrorForVersion(QUIC_RST_ACKNOWLEDGEMENT, GetParam()));
438 } 440 }
439 441
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 664
663 // Send the response body. 665 // Send the response body.
664 const char kResponseBody[] = "Hello world!"; 666 const char kResponseBody[] = "Hello world!";
665 ProcessPacket( 667 ProcessPacket(
666 ConstructServerDataPacket(3, false, !kFin, /*offset=*/0, kResponseBody)); 668 ConstructServerDataPacket(3, false, !kFin, /*offset=*/0, kResponseBody));
667 SpdyHeaderBlock trailers; 669 SpdyHeaderBlock trailers;
668 size_t spdy_trailers_frame_length; 670 size_t spdy_trailers_frame_length;
669 trailers["foo"] = "bar"; 671 trailers["foo"] = "bar";
670 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); 672 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody));
671 ProcessPacket(ConstructResponseTrailersPacket( 673 ProcessPacket(ConstructResponseTrailersPacket(
672 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); 674 4, kFin, std::move(trailers), &spdy_trailers_frame_length, &offset));
673 675
674 // Make sure trailers are processed. 676 // Make sure trailers are processed.
675 base::RunLoop().RunUntilIdle(); 677 base::RunLoop().RunUntilIdle();
676 678
677 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), 679 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)),
678 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), 680 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(),
679 callback_.callback())); 681 callback_.callback()));
680 EXPECT_TRUE(stream_->IsResponseBodyComplete()); 682 EXPECT_TRUE(stream_->IsResponseBodyComplete());
681 683
682 EXPECT_EQ(OK, 684 EXPECT_EQ(OK,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 728 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
727 net_log_.bound(), callback_.callback())); 729 net_log_.bound(), callback_.callback()));
728 EXPECT_EQ(OK, 730 EXPECT_EQ(OK,
729 stream_->SendRequest(headers_, &response_, callback_.callback())); 731 stream_->SendRequest(headers_, &response_, callback_.callback()));
730 732
731 // Ack the request. 733 // Ack the request.
732 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); 734 ProcessPacket(ConstructServerAckPacket(1, 0, 0));
733 735
734 EXPECT_EQ(ERR_IO_PENDING, stream_->ReadResponseHeaders(callback_.callback())); 736 EXPECT_EQ(ERR_IO_PENDING, stream_->ReadResponseHeaders(callback_.callback()));
735 737
736 SpdyHeaderBlock headers; 738 response_headers_[":status"] = "200 OK";
737 headers[":status"] = "200 OK"; 739 response_headers_[":version"] = "HTTP/1.1";
738 headers[":version"] = "HTTP/1.1"; 740 response_headers_["content-type"] = "text/plain";
739 headers["content-type"] = "text/plain"; 741 response_headers_["big6"] = string(1000, 'x'); // Lots of x's.
740 headers["big6"] = string(1000, 'x'); // Lots of x's.
741 742
742 response_headers_ = headers;
743 size_t spdy_response_headers_frame_length; 743 size_t spdy_response_headers_frame_length;
744 ProcessPacket(ConstructResponseHeadersPacket( 744 ProcessPacket(ConstructResponseHeadersPacket(
745 2, kFin, &spdy_response_headers_frame_length)); 745 2, kFin, &spdy_response_headers_frame_length));
746 746
747 // Now that the headers have been processed, the callback will return. 747 // Now that the headers have been processed, the callback will return.
748 EXPECT_EQ(OK, callback_.WaitForResult()); 748 EXPECT_EQ(OK, callback_.WaitForResult());
749 ASSERT_TRUE(response_.headers.get()); 749 ASSERT_TRUE(response_.headers.get());
750 EXPECT_EQ(200, response_.headers->response_code()); 750 EXPECT_EQ(200, response_.headers->response_code());
751 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); 751 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain"));
752 752
(...skipping 1079 matching lines...) Expand 10 before | Expand all | Expand 10 after
1832 EXPECT_TRUE(AtEof()); 1832 EXPECT_TRUE(AtEof());
1833 1833
1834 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. 1834 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers.
1835 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), 1835 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length),
1836 stream_->GetTotalSentBytes()); 1836 stream_->GetTotalSentBytes());
1837 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); 1837 EXPECT_EQ(0, stream_->GetTotalReceivedBytes());
1838 } 1838 }
1839 1839
1840 } // namespace test 1840 } // namespace test
1841 } // namespace net 1841 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_http_stream.cc ('k') | net/quic/quic_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698