46 lines
1.4 KiB
C++
46 lines
1.4 KiB
C++
// Copyright 2017 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 "mojo/public/cpp/bindings/lib/message_internal.h"
|
|
|
|
#include "mojo/public/cpp/bindings/lib/array_internal.h"
|
|
#include "mojo/public/cpp/bindings/message.h"
|
|
|
|
namespace mojo {
|
|
namespace internal {
|
|
|
|
namespace {
|
|
|
|
size_t ComputeHeaderSize(uint32_t flags, size_t payload_interface_id_count) {
|
|
if (payload_interface_id_count > 0) {
|
|
// Version 2
|
|
return sizeof(MessageHeaderV2);
|
|
} else if (flags &
|
|
(Message::kFlagExpectsResponse | Message::kFlagIsResponse)) {
|
|
// Version 1
|
|
return sizeof(MessageHeaderV1);
|
|
} else {
|
|
// Version 0
|
|
return sizeof(MessageHeader);
|
|
}
|
|
}
|
|
|
|
} // namespace
|
|
|
|
size_t ComputeSerializedMessageSize(uint32_t flags,
|
|
size_t payload_size,
|
|
size_t payload_interface_id_count) {
|
|
const size_t header_size =
|
|
ComputeHeaderSize(flags, payload_interface_id_count);
|
|
if (payload_interface_id_count > 0) {
|
|
return Align(header_size + Align(payload_size) +
|
|
ArrayDataTraits<uint32_t>::GetStorageSize(
|
|
static_cast<uint32_t>(payload_interface_id_count)));
|
|
}
|
|
return internal::Align(header_size + payload_size);
|
|
}
|
|
|
|
} // namespace internal
|
|
} // namespace mojo
|