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

Side by Side Diff: mojo/public/cpp/bindings/lib/message_builder.cc

Issue 2660733002: Mojo C++ bindings: introduce an optional array to store transferred interface IDs in messages. (Closed)
Patch Set: sync to ToT (no manual resolve) Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/public/cpp/bindings/lib/message_builder.h" 5 #include "mojo/public/cpp/bindings/lib/message_builder.h"
6 6
7 #include <stddef.h> 7 #include "mojo/public/cpp/bindings/lib/array_internal.h"
8 #include <stdint.h> 8 #include "mojo/public/cpp/bindings/lib/bindings_internal.h"
9 9 #include "mojo/public/cpp/bindings/lib/buffer.h"
10 #include "mojo/public/cpp/bindings/lib/serialization_util.h" 10 #include "mojo/public/cpp/bindings/lib/message_internal.h"
11 #include "mojo/public/cpp/bindings/message.h"
12 11
13 namespace mojo { 12 namespace mojo {
14 namespace internal { 13 namespace internal {
15 14
16 template <typename Header> 15 template <typename Header>
17 void Allocate(Buffer* buf, Header** header) { 16 void Allocate(Buffer* buf, Header** header) {
18 *header = static_cast<Header*>(buf->Allocate(sizeof(Header))); 17 *header = static_cast<Header*>(buf->Allocate(sizeof(Header)));
19 (*header)->num_bytes = sizeof(Header); 18 (*header)->num_bytes = sizeof(Header);
20 } 19 }
21 20
22 MessageBuilder::MessageBuilder(uint32_t name, size_t payload_size) { 21 MessageBuilder::MessageBuilder(uint32_t name,
23 InitializeMessage(sizeof(MessageHeader) + payload_size); 22 uint32_t flags,
23 size_t payload_size,
24 size_t payload_interface_id_count) {
25 if (payload_interface_id_count > 0) {
26 // Version 2
27 InitializeMessage(
28 sizeof(MessageHeaderV2) + Align(payload_size) +
29 ArrayDataTraits<uint32_t>::GetStorageSize(
30 static_cast<uint32_t>(payload_interface_id_count)));
24 31
25 MessageHeader* header; 32 MessageHeaderV2* header;
26 Allocate(message_.buffer(), &header); 33 Allocate(message_.buffer(), &header);
27 header->version = 0; 34 header->version = 2;
28 header->name = name; 35 header->name = name;
36 header->flags = flags;
37 // Set it to right after the message header.
Ken Rockot(use gerrit already) 2017/01/31 18:33:42 nit: Maybe clarify this comment -- something like
yzshen1 2017/01/31 19:26:05 Done.
38 header->payload.Set(header + 1);
39 } else if (flags &
40 (Message::kFlagExpectsResponse | Message::kFlagIsResponse)) {
41 // Version 1
42 InitializeMessage(sizeof(MessageHeaderV1) + payload_size);
43
44 MessageHeaderV1* header;
45 Allocate(message_.buffer(), &header);
46 header->version = 1;
47 header->name = name;
48 header->flags = flags;
49 } else {
50 InitializeMessage(sizeof(MessageHeader) + payload_size);
51
52 MessageHeader* header;
53 Allocate(message_.buffer(), &header);
54 header->version = 0;
55 header->name = name;
56 header->flags = flags;
57 }
29 } 58 }
30 59
31 MessageBuilder::~MessageBuilder() { 60 MessageBuilder::~MessageBuilder() {
32 } 61 }
33 62
34 MessageBuilder::MessageBuilder() {}
35
36 void MessageBuilder::InitializeMessage(size_t size) { 63 void MessageBuilder::InitializeMessage(size_t size) {
37 message_.Initialize(static_cast<uint32_t>(Align(size)), 64 message_.Initialize(static_cast<uint32_t>(Align(size)),
38 true /* zero_initialized */); 65 true /* zero_initialized */);
39 } 66 }
40 67
41 MessageWithRequestIDBuilder::MessageWithRequestIDBuilder(uint32_t name,
42 size_t payload_size,
43 uint32_t flags,
44 uint64_t request_id) {
45 InitializeMessage(sizeof(MessageHeaderWithRequestID) + payload_size);
46
47 MessageHeaderWithRequestID* header;
48 Allocate(message_.buffer(), &header);
49 header->version = 1;
50 header->name = name;
51 header->flags = flags;
52 header->request_id = request_id;
53 }
54
55 } // namespace internal 68 } // namespace internal
56 } // namespace mojo 69 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698