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

Unified Diff: content/common/cc_messages.cc

Issue 35893002: IPC pickling optimization for render passes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ccmessagesperf-reserve: nits Created 7 years, 2 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 | « base/pickle.cc ('k') | content/common/cc_messages_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/cc_messages.cc
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc
index d27446af9594bdfd1b6cca81e3ed0338f2b542e4..8b54af2523c7bbff6a07c3b4005dbef09be8d995 100644
--- a/content/common/cc_messages.cc
+++ b/content/common/cc_messages.cc
@@ -369,6 +369,19 @@ void ParamTraits<cc::RenderPass>::Write(
}
}
+static size_t ReserveSizeForRenderPassWrite(const cc::RenderPass& p) {
+ size_t to_reserve = sizeof(cc::RenderPass);
+
+ to_reserve += p.shared_quad_state_list.size() * sizeof(cc::SharedQuadState);
+
+ // The shared_quad_state_index for each quad.
+ to_reserve += p.quad_list.size() * sizeof(size_t);
+
+ // The largest quad type, verified by a unit test.
+ to_reserve += p.quad_list.size() * sizeof(cc::RenderPassDrawQuad);
+ return to_reserve;
+}
+
template<typename QuadType>
static scoped_ptr<cc::DrawQuad> ReadDrawQuad(const Message* m,
PickleIterator* iter) {
@@ -680,6 +693,14 @@ void ParamTraits<cc::CompositorFrameAck>::Log(const param_type& p,
void ParamTraits<cc::DelegatedFrameData>::Write(Message* m,
const param_type& p) {
DCHECK_NE(0u, p.render_pass_list.size());
+
+ size_t to_reserve = p.resource_list.size() * sizeof(cc::TransferableResource);
+ for (size_t i = 0; i < p.render_pass_list.size(); ++i) {
+ const cc::RenderPass* pass = p.render_pass_list[i];
+ to_reserve += ReserveSizeForRenderPassWrite(*pass);
+ }
+ m->Reserve(to_reserve);
+
WriteParam(m, p.resource_list);
WriteParam(m, p.render_pass_list.size());
for (size_t i = 0; i < p.render_pass_list.size(); ++i)
« no previous file with comments | « base/pickle.cc ('k') | content/common/cc_messages_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698