Index: net/tools/flip_server/output_ordering.cc |
diff --git a/net/tools/flip_server/output_ordering.cc b/net/tools/flip_server/output_ordering.cc |
deleted file mode 100644 |
index 24e92c0c000154d43bebf1324c72d31c79e7a417..0000000000000000000000000000000000000000 |
--- a/net/tools/flip_server/output_ordering.cc |
+++ /dev/null |
@@ -1,180 +0,0 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/tools/flip_server/output_ordering.h" |
- |
-#include <utility> |
- |
-#include "net/tools/flip_server/flip_config.h" |
-#include "net/tools/flip_server/sm_connection.h" |
- |
-namespace net { |
- |
-OutputOrdering::PriorityMapPointer::PriorityMapPointer() |
- : ring(NULL), alarm_enabled(false) {} |
- |
-OutputOrdering::PriorityMapPointer::PriorityMapPointer( |
- const PriorityMapPointer& other) = default; |
- |
-OutputOrdering::PriorityMapPointer::~PriorityMapPointer() {} |
- |
-// static |
-double OutputOrdering::server_think_time_in_s_ = 0.0; |
- |
-OutputOrdering::OutputOrdering(SMConnectionInterface* connection) |
- : first_data_senders_threshold_(kInitialDataSendersThreshold), |
- connection_(connection) { |
- if (connection) |
- epoll_server_ = connection->epoll_server(); |
-} |
- |
-OutputOrdering::~OutputOrdering() { Reset(); } |
- |
-void OutputOrdering::Reset() { |
- while (!stream_ids_.empty()) { |
- StreamIdToPriorityMap::iterator sitpmi = stream_ids_.begin(); |
- PriorityMapPointer& pmp = sitpmi->second; |
- if (pmp.alarm_enabled) { |
- epoll_server_->UnregisterAlarm(pmp.alarm_token); |
- } |
- stream_ids_.erase(sitpmi); |
- } |
- priority_map_.clear(); |
- first_data_senders_.clear(); |
-} |
- |
-bool OutputOrdering::ExistsInPriorityMaps(uint32_t stream_id) const { |
- StreamIdToPriorityMap::const_iterator sitpmi = stream_ids_.find(stream_id); |
- return sitpmi != stream_ids_.end(); |
-} |
- |
-OutputOrdering::BeginOutputtingAlarm::BeginOutputtingAlarm( |
- OutputOrdering* oo, |
- OutputOrdering::PriorityMapPointer* pmp, |
- const MemCacheIter& mci) |
- : output_ordering_(oo), pmp_(pmp), mci_(mci), epoll_server_(NULL) {} |
- |
-OutputOrdering::BeginOutputtingAlarm::~BeginOutputtingAlarm() { |
- if (epoll_server_ && pmp_->alarm_enabled) |
- epoll_server_->UnregisterAlarm(pmp_->alarm_token); |
-} |
- |
-int64_t OutputOrdering::BeginOutputtingAlarm::OnAlarm() { |
- OnUnregistration(); |
- output_ordering_->MoveToActive(pmp_, mci_); |
- VLOG(2) << "ON ALARM! Should now start to output..."; |
- delete this; |
- return 0; |
-} |
- |
-void OutputOrdering::BeginOutputtingAlarm::OnRegistration( |
- const EpollServer::AlarmRegToken& tok, |
- EpollServer* eps) { |
- epoll_server_ = eps; |
- pmp_->alarm_token = tok; |
- pmp_->alarm_enabled = true; |
-} |
- |
-void OutputOrdering::BeginOutputtingAlarm::OnUnregistration() { |
- pmp_->alarm_enabled = false; |
- delete this; |
-} |
- |
-void OutputOrdering::BeginOutputtingAlarm::OnShutdown(EpollServer* eps) { |
- OnUnregistration(); |
-} |
- |
-void OutputOrdering::MoveToActive(PriorityMapPointer* pmp, MemCacheIter mci) { |
- VLOG(2) << "Moving to active!"; |
- first_data_senders_.push_back(mci); |
- pmp->ring = &first_data_senders_; |
- pmp->it = first_data_senders_.end(); |
- --pmp->it; |
- connection_->ReadyToSend(); |
-} |
- |
-void OutputOrdering::AddToOutputOrder(const MemCacheIter& mci) { |
- if (ExistsInPriorityMaps(mci.stream_id)) |
- LOG(ERROR) << "OOps, already was inserted here?!"; |
- |
- double think_time_in_s = server_think_time_in_s_; |
- std::string x_server_latency = |
- mci.file_data->headers()->GetHeader("X-Server-Latency").as_string(); |
- if (!x_server_latency.empty()) { |
- char* endp; |
- double tmp_think_time_in_s = strtod(x_server_latency.c_str(), &endp); |
- if (endp != x_server_latency.c_str() + x_server_latency.size()) { |
- LOG(ERROR) << "Unable to understand X-Server-Latency of: " |
- << x_server_latency |
- << " for resource: " << mci.file_data->filename().c_str(); |
- } else { |
- think_time_in_s = tmp_think_time_in_s; |
- } |
- } |
- StreamIdToPriorityMap::iterator sitpmi; |
- sitpmi = stream_ids_.insert(std::pair<uint32_t, PriorityMapPointer>( |
- mci.stream_id, PriorityMapPointer())) |
- .first; |
- PriorityMapPointer& pmp = sitpmi->second; |
- |
- BeginOutputtingAlarm* boa = new BeginOutputtingAlarm(this, &pmp, mci); |
- VLOG(1) << "Server think time: " << think_time_in_s; |
- epoll_server_->RegisterAlarmApproximateDelta(think_time_in_s * 1000000, boa); |
-} |
- |
-void OutputOrdering::SpliceToPriorityRing(PriorityRing::iterator pri) { |
- MemCacheIter& mci = *pri; |
- PriorityMap::iterator pmi = priority_map_.find(mci.priority); |
- if (pmi == priority_map_.end()) { |
- pmi = priority_map_.insert(std::pair<uint32_t, PriorityRing>( |
- mci.priority, PriorityRing())) |
- .first; |
- } |
- |
- pmi->second.splice(pmi->second.end(), first_data_senders_, pri); |
- StreamIdToPriorityMap::iterator sitpmi = stream_ids_.find(mci.stream_id); |
- sitpmi->second.ring = &(pmi->second); |
-} |
- |
-MemCacheIter* OutputOrdering::GetIter() { |
- while (!first_data_senders_.empty()) { |
- MemCacheIter& mci = first_data_senders_.front(); |
- if (mci.bytes_sent >= first_data_senders_threshold_) { |
- SpliceToPriorityRing(first_data_senders_.begin()); |
- } else { |
- first_data_senders_.splice(first_data_senders_.end(), |
- first_data_senders_, |
- first_data_senders_.begin()); |
- mci.max_segment_size = kInitialDataSendersThreshold; |
- return &mci; |
- } |
- } |
- while (!priority_map_.empty()) { |
- PriorityRing& first_ring = priority_map_.begin()->second; |
- if (first_ring.empty()) { |
- priority_map_.erase(priority_map_.begin()); |
- continue; |
- } |
- MemCacheIter& mci = first_ring.front(); |
- first_ring.splice(first_ring.end(), first_ring, first_ring.begin()); |
- mci.max_segment_size = kSpdySegmentSize; |
- return &mci; |
- } |
- return NULL; |
-} |
- |
-void OutputOrdering::RemoveStreamId(uint32_t stream_id) { |
- StreamIdToPriorityMap::iterator sitpmi = stream_ids_.find(stream_id); |
- if (sitpmi == stream_ids_.end()) |
- return; |
- |
- PriorityMapPointer& pmp = sitpmi->second; |
- if (pmp.alarm_enabled) |
- epoll_server_->UnregisterAlarm(pmp.alarm_token); |
- else |
- pmp.ring->erase(pmp.it); |
- stream_ids_.erase(sitpmi); |
-} |
- |
-} // namespace net |