RenderRootTypes.cpp (3982B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "RenderRootTypes.h" 8 #include "mozilla/layers/WebRenderMessageUtils.h" 9 #include "mozilla/layers/WebRenderBridgeChild.h" 10 11 using namespace mozilla::layers; 12 13 namespace IPC { 14 15 void ParamTraits<DisplayListData>::Write(IPC::MessageWriter* aWriter, 16 paramType&& aParam) { 17 WriteParam(aWriter, aParam.mIdNamespace); 18 WriteParam(aWriter, aParam.mRect); 19 WriteParam(aWriter, aParam.mCommands); 20 WriteParam(aWriter, std::move(aParam.mDLItems)); 21 WriteParam(aWriter, std::move(aParam.mDLCache)); 22 WriteParam(aWriter, std::move(aParam.mDLSpatialTree)); 23 WriteParam(aWriter, aParam.mDLDesc); 24 WriteParam(aWriter, aParam.mResourceUpdates); 25 WriteParam(aWriter, aParam.mSmallShmems); 26 WriteParam(aWriter, std::move(aParam.mLargeShmems)); 27 WriteParam(aWriter, aParam.mScrollData); 28 } 29 30 bool ParamTraits<DisplayListData>::Read(IPC::MessageReader* aReader, 31 paramType* aResult) { 32 return ReadParam(aReader, &aResult->mIdNamespace) && 33 ReadParam(aReader, &aResult->mRect) && 34 ReadParam(aReader, &aResult->mCommands) && 35 ReadParam(aReader, &aResult->mDLItems) && 36 ReadParam(aReader, &aResult->mDLCache) && 37 ReadParam(aReader, &aResult->mDLSpatialTree) && 38 ReadParam(aReader, &aResult->mDLDesc) && 39 ReadParam(aReader, &aResult->mResourceUpdates) && 40 ReadParam(aReader, &aResult->mSmallShmems) && 41 ReadParam(aReader, &aResult->mLargeShmems) && 42 ReadParam(aReader, &aResult->mScrollData); 43 } 44 45 static void WriteScrollUpdates(IPC::MessageWriter* aWriter, 46 ScrollUpdatesMap& aParam) { 47 // ICK: we need to manually serialize this map because 48 // nsTHashMap doesn't support it (and other maps cause other issues) 49 WriteParam(aWriter, aParam.Count()); 50 for (auto it = aParam.ConstIter(); !it.Done(); it.Next()) { 51 WriteParam(aWriter, it.Key()); 52 WriteParam(aWriter, it.Data()); 53 } 54 } 55 56 static bool ReadScrollUpdates(IPC::MessageReader* aReader, 57 ScrollUpdatesMap* aResult) { 58 // Manually deserialize mScrollUpdates as a stream of K,V pairs 59 uint32_t count; 60 if (!ReadParam(aReader, &count)) { 61 return false; 62 } 63 64 ScrollUpdatesMap map(count); 65 for (size_t i = 0; i < count; ++i) { 66 ScrollableLayerGuid::ViewID key; 67 nsTArray<mozilla::ScrollPositionUpdate> data; 68 if (!ReadParam(aReader, &key) || !ReadParam(aReader, &data)) { 69 return false; 70 } 71 map.InsertOrUpdate(key, std::move(data)); 72 } 73 74 MOZ_RELEASE_ASSERT(map.Count() == count); 75 *aResult = std::move(map); 76 return true; 77 } 78 79 void ParamTraits<TransactionData>::Write(IPC::MessageWriter* aWriter, 80 paramType&& aParam) { 81 WriteParam(aWriter, aParam.mIdNamespace); 82 WriteParam(aWriter, aParam.mCommands); 83 WriteParam(aWriter, aParam.mResourceUpdates); 84 WriteParam(aWriter, aParam.mSmallShmems); 85 WriteParam(aWriter, std::move(aParam.mLargeShmems)); 86 WriteScrollUpdates(aWriter, aParam.mScrollUpdates); 87 WriteParam(aWriter, aParam.mPaintSequenceNumber); 88 } 89 90 bool ParamTraits<TransactionData>::Read(IPC::MessageReader* aReader, 91 paramType* aResult) { 92 return ReadParam(aReader, &aResult->mIdNamespace) && 93 ReadParam(aReader, &aResult->mCommands) && 94 ReadParam(aReader, &aResult->mResourceUpdates) && 95 ReadParam(aReader, &aResult->mSmallShmems) && 96 ReadParam(aReader, &aResult->mLargeShmems) && 97 ReadScrollUpdates(aReader, &aResult->mScrollUpdates) && 98 ReadParam(aReader, &aResult->mPaintSequenceNumber); 99 } 100 101 } // namespace IPC