tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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