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

Unified Diff: net/spdy/http2_priority_dependencies.h

Issue 1779733003: Fix bug in net::RequestPriority -> HTTP/2 dependency conversion. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make bi-directional stream unittests enable priority->dependency setting. Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/net.gypi ('k') | net/spdy/http2_priority_dependencies.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/http2_priority_dependencies.h
diff --git a/net/spdy/http2_priority_dependencies.h b/net/spdy/http2_priority_dependencies.h
new file mode 100644
index 0000000000000000000000000000000000000000..8f4ced011676dbe7e4e268b791953d652242e956
--- /dev/null
+++ b/net/spdy/http2_priority_dependencies.h
@@ -0,0 +1,60 @@
+// Copyright 2016 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.
+
+#ifndef NET_HTTP2_PRIORITY_DEPENDENCIES_H_
+#define NET_HTTP2_PRIORITY_DEPENDENCIES_H_
+
+#include <list>
+#include <map>
+
+#include "net/spdy/spdy_protocol.h"
+
+namespace net {
+
+// A helper class encapsulating the state and logic to set dependencies of
+// HTTP2 streams based on their SpdyPriority and the ordering
+// of creation and deletion of the streams.
+class NET_EXPORT_PRIVATE Http2PriorityDependencies {
+ public:
+ Http2PriorityDependencies();
+ ~Http2PriorityDependencies();
+
+ // Called when a stream SYN is sent to the server. Note that in the
+ // case of server push, a stream may be created without this routine
+ // being called. In such cases, the client ignores the stream's priority
+ // (as the server is effectively overriding the client's notions of
+ // priority anyway).
+ // On return, |*dependent_stream_id| is set to the stream id that
+ // this stream should be made dependent on, and |*exclusive| set to
+ // whether that dependency should be exclusive.
+ void OnStreamSynSent(SpdyStreamId id,
+ SpdyPriority priority,
+ SpdyStreamId* dependent_stream_id,
+ bool* exclusive);
+
+ void OnStreamDestruction(SpdyStreamId id);
+
+ private:
+ // The requirements for the internal data structure for this class are:
+ // a) Constant time insertion of entries at the end of the list,
+ // b) Fast removal of any entry based on its id.
+ // c) Constant time lookup of the entry at the end of the list.
+ // std::list would satisfy (a) & (c), but some form of map is
+ // needed for (b). The priority must be included in the map
+ // entries so that deletion can determine which list in id_priority_lists_
+ // to erase from.
+ using IdList = std::list<std::pair<SpdyStreamId, SpdyPriority>>;
+ using EntryMap = std::map<SpdyStreamId, IdList::iterator>;
+
+ IdList id_priority_lists_[kV3LowestPriority + 1];
+
+ // Tracks the location of an id anywhere in the above vector of lists.
+ // Iterators to list elements remain valid until those particular elements
+ // are erased.
+ EntryMap entry_by_stream_id_;
+};
+
+} // namespace net
+
+#endif // NET_HTTP2_PRIORITY_DEPENDENCIES_H_
« no previous file with comments | « net/net.gypi ('k') | net/spdy/http2_priority_dependencies.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698