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

Side by Side Diff: net/spdy/buffered_spdy_framer.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, 6 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/spdy/buffered_spdy_framer.h ('k') | net/spdy/buffered_spdy_framer_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/spdy/buffered_spdy_framer.h" 5 #include "net/spdy/buffered_spdy_framer.h"
6 6
7 #include <utility>
8
7 #include "base/logging.h" 9 #include "base/logging.h"
8 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
9 11
10 namespace net { 12 namespace net {
11 13
12 namespace { 14 namespace {
13 15
14 // GOAWAY frame debug data is only buffered up to this many bytes. 16 // GOAWAY frame debug data is only buffered up to this many bytes.
15 size_t kGoAwayDebugDataMaxSize = 1024; 17 size_t kGoAwayDebugDataMaxSize = 1024;
16 18
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 return spdy_framer_.HasError(); 371 return spdy_framer_.HasError();
370 } 372 }
371 373
372 // TODO(jgraettinger): Eliminate uses of this method (prefer 374 // TODO(jgraettinger): Eliminate uses of this method (prefer
373 // SpdySynStreamIR). 375 // SpdySynStreamIR).
374 SpdySerializedFrame* BufferedSpdyFramer::CreateSynStream( 376 SpdySerializedFrame* BufferedSpdyFramer::CreateSynStream(
375 SpdyStreamId stream_id, 377 SpdyStreamId stream_id,
376 SpdyStreamId associated_stream_id, 378 SpdyStreamId associated_stream_id,
377 SpdyPriority priority, 379 SpdyPriority priority,
378 SpdyControlFlags flags, 380 SpdyControlFlags flags,
379 const SpdyHeaderBlock* headers) { 381 SpdyHeaderBlock headers) {
380 SpdySynStreamIR syn_stream(stream_id); 382 SpdySynStreamIR syn_stream(stream_id, std::move(headers));
381 syn_stream.set_associated_to_stream_id(associated_stream_id); 383 syn_stream.set_associated_to_stream_id(associated_stream_id);
382 syn_stream.set_priority(priority); 384 syn_stream.set_priority(priority);
383 syn_stream.set_fin((flags & CONTROL_FLAG_FIN) != 0); 385 syn_stream.set_fin((flags & CONTROL_FLAG_FIN) != 0);
384 syn_stream.set_unidirectional((flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0); 386 syn_stream.set_unidirectional((flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0);
385 // TODO(hkhalil): Avoid copy here.
386 syn_stream.set_header_block(*headers);
387 return new SpdySerializedFrame(spdy_framer_.SerializeSynStream(syn_stream)); 387 return new SpdySerializedFrame(spdy_framer_.SerializeSynStream(syn_stream));
388 } 388 }
389 389
390 // TODO(jgraettinger): Eliminate uses of this method (prefer 390 // TODO(jgraettinger): Eliminate uses of this method (prefer
391 // SpdySynReplyIR). 391 // SpdySynReplyIR).
392 SpdySerializedFrame* BufferedSpdyFramer::CreateSynReply( 392 SpdySerializedFrame* BufferedSpdyFramer::CreateSynReply(
393 SpdyStreamId stream_id, 393 SpdyStreamId stream_id,
394 SpdyControlFlags flags, 394 SpdyControlFlags flags,
395 const SpdyHeaderBlock* headers) { 395 SpdyHeaderBlock headers) {
396 SpdySynReplyIR syn_reply(stream_id); 396 SpdySynReplyIR syn_reply(stream_id, std::move(headers));
397 syn_reply.set_fin(flags & CONTROL_FLAG_FIN); 397 syn_reply.set_fin(flags & CONTROL_FLAG_FIN);
398 // TODO(hkhalil): Avoid copy here.
399 syn_reply.set_header_block(*headers);
400 return new SpdySerializedFrame(spdy_framer_.SerializeSynReply(syn_reply)); 398 return new SpdySerializedFrame(spdy_framer_.SerializeSynReply(syn_reply));
401 } 399 }
402 400
403 // TODO(jgraettinger): Eliminate uses of this method (prefer 401 // TODO(jgraettinger): Eliminate uses of this method (prefer
404 // SpdyRstStreamIR). 402 // SpdyRstStreamIR).
405 SpdySerializedFrame* BufferedSpdyFramer::CreateRstStream( 403 SpdySerializedFrame* BufferedSpdyFramer::CreateRstStream(
406 SpdyStreamId stream_id, 404 SpdyStreamId stream_id,
407 SpdyRstStreamStatus status) const { 405 SpdyRstStreamStatus status) const {
408 SpdyRstStreamIR rst_ir(stream_id, status); 406 SpdyRstStreamIR rst_ir(stream_id, status);
409 return new SpdySerializedFrame(spdy_framer_.SerializeRstStream(rst_ir)); 407 return new SpdySerializedFrame(spdy_framer_.SerializeRstStream(rst_ir));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 base::StringPiece debug_data) const { 439 base::StringPiece debug_data) const {
442 SpdyGoAwayIR go_ir(last_accepted_stream_id, status, debug_data); 440 SpdyGoAwayIR go_ir(last_accepted_stream_id, status, debug_data);
443 return new SpdySerializedFrame(spdy_framer_.SerializeGoAway(go_ir)); 441 return new SpdySerializedFrame(spdy_framer_.SerializeGoAway(go_ir));
444 } 442 }
445 443
446 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyHeadersIR). 444 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyHeadersIR).
447 SpdySerializedFrame* BufferedSpdyFramer::CreateHeaders( 445 SpdySerializedFrame* BufferedSpdyFramer::CreateHeaders(
448 SpdyStreamId stream_id, 446 SpdyStreamId stream_id,
449 SpdyControlFlags flags, 447 SpdyControlFlags flags,
450 int weight, 448 int weight,
451 const SpdyHeaderBlock* headers) { 449 SpdyHeaderBlock headers) {
452 SpdyHeadersIR headers_ir(stream_id); 450 SpdyHeadersIR headers_ir(stream_id, std::move(headers));
453 headers_ir.set_fin((flags & CONTROL_FLAG_FIN) != 0); 451 headers_ir.set_fin((flags & CONTROL_FLAG_FIN) != 0);
454 if (flags & HEADERS_FLAG_PRIORITY) { 452 if (flags & HEADERS_FLAG_PRIORITY) {
455 headers_ir.set_has_priority(true); 453 headers_ir.set_has_priority(true);
456 headers_ir.set_weight(weight); 454 headers_ir.set_weight(weight);
457 } 455 }
458 headers_ir.set_header_block(*headers);
459 return new SpdySerializedFrame(spdy_framer_.SerializeHeaders(headers_ir)); 456 return new SpdySerializedFrame(spdy_framer_.SerializeHeaders(headers_ir));
460 } 457 }
461 458
462 // TODO(jgraettinger): Eliminate uses of this method (prefer 459 // TODO(jgraettinger): Eliminate uses of this method (prefer
463 // SpdyWindowUpdateIR). 460 // SpdyWindowUpdateIR).
464 SpdySerializedFrame* BufferedSpdyFramer::CreateWindowUpdate( 461 SpdySerializedFrame* BufferedSpdyFramer::CreateWindowUpdate(
465 SpdyStreamId stream_id, 462 SpdyStreamId stream_id,
466 uint32_t delta_window_size) const { 463 uint32_t delta_window_size) const {
467 SpdyWindowUpdateIR update_ir(stream_id, delta_window_size); 464 SpdyWindowUpdateIR update_ir(stream_id, delta_window_size);
468 return new SpdySerializedFrame(spdy_framer_.SerializeWindowUpdate(update_ir)); 465 return new SpdySerializedFrame(spdy_framer_.SerializeWindowUpdate(update_ir));
469 } 466 }
470 467
471 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyDataIR). 468 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyDataIR).
472 SpdySerializedFrame* BufferedSpdyFramer::CreateDataFrame(SpdyStreamId stream_id, 469 SpdySerializedFrame* BufferedSpdyFramer::CreateDataFrame(SpdyStreamId stream_id,
473 const char* data, 470 const char* data,
474 uint32_t len, 471 uint32_t len,
475 SpdyDataFlags flags) { 472 SpdyDataFlags flags) {
476 SpdyDataIR data_ir(stream_id, 473 SpdyDataIR data_ir(stream_id,
477 base::StringPiece(data, len)); 474 base::StringPiece(data, len));
478 data_ir.set_fin((flags & DATA_FLAG_FIN) != 0); 475 data_ir.set_fin((flags & DATA_FLAG_FIN) != 0);
479 return new SpdySerializedFrame(spdy_framer_.SerializeData(data_ir)); 476 return new SpdySerializedFrame(spdy_framer_.SerializeData(data_ir));
480 } 477 }
481 478
482 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyPushPromiseIR). 479 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyPushPromiseIR).
483 SpdySerializedFrame* BufferedSpdyFramer::CreatePushPromise( 480 SpdySerializedFrame* BufferedSpdyFramer::CreatePushPromise(
484 SpdyStreamId stream_id, 481 SpdyStreamId stream_id,
485 SpdyStreamId promised_stream_id, 482 SpdyStreamId promised_stream_id,
486 const SpdyHeaderBlock* headers) { 483 SpdyHeaderBlock headers) {
487 SpdyPushPromiseIR push_promise_ir(stream_id, promised_stream_id); 484 SpdyPushPromiseIR push_promise_ir(stream_id, promised_stream_id,
488 push_promise_ir.set_header_block(*headers); 485 std::move(headers));
489 return new SpdySerializedFrame( 486 return new SpdySerializedFrame(
490 spdy_framer_.SerializePushPromise(push_promise_ir)); 487 spdy_framer_.SerializePushPromise(push_promise_ir));
491 } 488 }
492 489
493 SpdyPriority BufferedSpdyFramer::GetHighestPriority() const { 490 SpdyPriority BufferedSpdyFramer::GetHighestPriority() const {
494 return spdy_framer_.GetHighestPriority(); 491 return spdy_framer_.GetHighestPriority();
495 } 492 }
496 493
497 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) { 494 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) {
498 header_buffer_.clear(); 495 header_buffer_.clear();
499 header_buffer_valid_ = true; 496 header_buffer_valid_ = true;
500 header_stream_id_ = stream_id; 497 header_stream_id_ = stream_id;
501 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream); 498 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream);
502 } 499 }
503 500
504 } // namespace net 501 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/buffered_spdy_framer.h ('k') | net/spdy/buffered_spdy_framer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698