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

Side by Side Diff: mojo/public/cpp/bindings/lib/array_serialization.h

Issue 2174843003: cc mojo: Use ArrayDataViews in RenderPasses (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix RenderPassId Created 4 years, 4 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <string.h> // For |memcpy()|. 9 #include <string.h> // For |memcpy()|.
10 10
(...skipping 28 matching lines...) Expand all
39 39
40 explicit ArrayIterator(MaybeConstUserType& input) 40 explicit ArrayIterator(MaybeConstUserType& input)
41 : input_(input), iter_(CallGetBeginIfExists<Traits>(input)) {} 41 : input_(input), iter_(CallGetBeginIfExists<Traits>(input)) {}
42 ~ArrayIterator() {} 42 ~ArrayIterator() {}
43 43
44 size_t GetSize() const { return Traits::GetSize(input_); } 44 size_t GetSize() const { return Traits::GetSize(input_); }
45 45
46 using GetNextResult = 46 using GetNextResult =
47 decltype(Traits::GetValue(std::declval<IteratorType&>())); 47 decltype(Traits::GetValue(std::declval<IteratorType&>()));
48 GetNextResult GetNext() { 48 GetNextResult GetNext() {
49 auto& value = Traits::GetValue(iter_); 49 GetNextResult value = Traits::GetValue(iter_);
50 Traits::AdvanceIterator(iter_); 50 Traits::AdvanceIterator(iter_);
51 return value; 51 return value;
52 } 52 }
53 53
54 using GetDataIfExistsResult = decltype( 54 using GetDataIfExistsResult = decltype(
55 CallGetDataIfExists<Traits>(std::declval<MaybeConstUserType&>())); 55 CallGetDataIfExists<Traits>(std::declval<MaybeConstUserType&>()));
56 GetDataIfExistsResult GetDataIfExists() { 56 GetDataIfExistsResult GetDataIfExists() {
57 return CallGetDataIfExists<Traits>(input_); 57 return CallGetDataIfExists<Traits>(input_);
58 } 58 }
59 59
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 static void SerializeElements(UserTypeIterator* input, 299 static void SerializeElements(UserTypeIterator* input,
300 Buffer* buf, 300 Buffer* buf,
301 Data* output, 301 Data* output,
302 const ContainerValidateParams* validate_params, 302 const ContainerValidateParams* validate_params,
303 SerializationContext* context) { 303 SerializationContext* context) {
304 DCHECK(!validate_params->element_validate_params) 304 DCHECK(!validate_params->element_validate_params)
305 << "Handle or interface type should not have array validate params"; 305 << "Handle or interface type should not have array validate params";
306 306
307 size_t size = input->GetSize(); 307 size_t size = input->GetSize();
308 for (size_t i = 0; i < size; ++i) { 308 for (size_t i = 0; i < size; ++i) {
309 Serialize<Element>(input->GetNext(), &output->at(i), context); 309 typename UserTypeIterator::GetNextResult next = input->GetNext();
310 Serialize<Element>(next, &output->at(i), context);
310 311
311 static const ValidationError kError = 312 static const ValidationError kError =
312 BelongsTo<Element, 313 BelongsTo<Element,
313 MojomTypeCategory::ASSOCIATED_INTERFACE | 314 MojomTypeCategory::ASSOCIATED_INTERFACE |
314 MojomTypeCategory::ASSOCIATED_INTERFACE_REQUEST>::value 315 MojomTypeCategory::ASSOCIATED_INTERFACE_REQUEST>::value
315 ? VALIDATION_ERROR_UNEXPECTED_INVALID_INTERFACE_ID 316 ? VALIDATION_ERROR_UNEXPECTED_INVALID_INTERFACE_ID
316 : VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE; 317 : VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE;
317 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 318 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
318 !validate_params->element_is_nullable && 319 !validate_params->element_is_nullable &&
319 !IsHandleOrInterfaceValid(output->at(i)), 320 !IsHandleOrInterfaceValid(output->at(i)),
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 using UserType = typename std::remove_const<MaybeConstUserType>::type; 355 using UserType = typename std::remove_const<MaybeConstUserType>::type;
355 using Data = typename MojomTypeTraits<MojomType>::Data; 356 using Data = typename MojomTypeTraits<MojomType>::Data;
356 using Element = typename MojomType::Element; 357 using Element = typename MojomType::Element;
357 using DataElementPtr = typename MojomTypeTraits<Element>::Data*; 358 using DataElementPtr = typename MojomTypeTraits<Element>::Data*;
358 using Traits = ArrayTraits<UserType>; 359 using Traits = ArrayTraits<UserType>;
359 360
360 static size_t GetSerializedSize(UserTypeIterator* input, 361 static size_t GetSerializedSize(UserTypeIterator* input,
361 SerializationContext* context) { 362 SerializationContext* context) {
362 size_t element_count = input->GetSize(); 363 size_t element_count = input->GetSize();
363 size_t size = sizeof(Data) + element_count * sizeof(typename Data::Element); 364 size_t size = sizeof(Data) + element_count * sizeof(typename Data::Element);
364 for (size_t i = 0; i < element_count; ++i) 365 for (size_t i = 0; i < element_count; ++i) {
365 size += PrepareToSerialize<Element>(input->GetNext(), context); 366 typename UserTypeIterator::GetNextResult next = input->GetNext();
367 size += PrepareToSerialize<Element>(next, context);
368 }
366 return size; 369 return size;
367 } 370 }
368 371
369 static void SerializeElements(UserTypeIterator* input, 372 static void SerializeElements(UserTypeIterator* input,
370 Buffer* buf, 373 Buffer* buf,
371 Data* output, 374 Data* output,
372 const ContainerValidateParams* validate_params, 375 const ContainerValidateParams* validate_params,
373 SerializationContext* context) { 376 SerializationContext* context) {
374 size_t size = input->GetSize(); 377 size_t size = input->GetSize();
375 for (size_t i = 0; i < size; ++i) { 378 for (size_t i = 0; i < size; ++i) {
376 DataElementPtr data_ptr; 379 DataElementPtr data_ptr;
377 SerializeCaller<Element>::Run(input->GetNext(), buf, &data_ptr, 380 typename UserTypeIterator::GetNextResult next = input->GetNext();
381 SerializeCaller<Element>::Run(next, buf, &data_ptr,
378 validate_params->element_validate_params, 382 validate_params->element_validate_params,
379 context); 383 context);
380 output->at(i).Set(data_ptr); 384 output->at(i).Set(data_ptr);
381 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 385 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
382 !validate_params->element_is_nullable && !data_ptr, 386 !validate_params->element_is_nullable && !data_ptr,
383 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, 387 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
384 MakeMessageWithArrayIndex("null in array expecting valid pointers", 388 MakeMessageWithArrayIndex("null in array expecting valid pointers",
385 size, i)); 389 size, i));
386 } 390 }
387 } 391 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 typename Traits::Element>::value, 452 typename Traits::Element>::value,
449 "Incorrect array serializer"); 453 "Incorrect array serializer");
450 454
451 static size_t GetSerializedSize(UserTypeIterator* input, 455 static size_t GetSerializedSize(UserTypeIterator* input,
452 SerializationContext* context) { 456 SerializationContext* context) {
453 size_t element_count = input->GetSize(); 457 size_t element_count = input->GetSize();
454 size_t size = sizeof(Data); 458 size_t size = sizeof(Data);
455 for (size_t i = 0; i < element_count; ++i) { 459 for (size_t i = 0; i < element_count; ++i) {
456 // Call with |inlined| set to false, so that it will account for both the 460 // Call with |inlined| set to false, so that it will account for both the
457 // data in the union and the space in the array used to hold the union. 461 // data in the union and the space in the array used to hold the union.
458 size += PrepareToSerialize<Element>(input->GetNext(), false, context); 462 typename UserTypeIterator::GetNextResult next = input->GetNext();
463 size += PrepareToSerialize<Element>(next, false, context);
459 } 464 }
460 return size; 465 return size;
461 } 466 }
462 467
463 static void SerializeElements(UserTypeIterator* input, 468 static void SerializeElements(UserTypeIterator* input,
464 Buffer* buf, 469 Buffer* buf,
465 Data* output, 470 Data* output,
466 const ContainerValidateParams* validate_params, 471 const ContainerValidateParams* validate_params,
467 SerializationContext* context) { 472 SerializationContext* context) {
468 size_t size = input->GetSize(); 473 size_t size = input->GetSize();
469 for (size_t i = 0; i < size; ++i) { 474 for (size_t i = 0; i < size; ++i) {
470 typename Data::Element* result = output->storage() + i; 475 typename Data::Element* result = output->storage() + i;
471 Serialize<Element>(input->GetNext(), buf, &result, true, context); 476 typename UserTypeIterator::GetNextResult next = input->GetNext();
477 Serialize<Element>(next, buf, &result, true, context);
472 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 478 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
473 !validate_params->element_is_nullable && output->at(i).is_null(), 479 !validate_params->element_is_nullable && output->at(i).is_null(),
474 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, 480 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
475 MakeMessageWithArrayIndex("null in array expecting valid unions", 481 MakeMessageWithArrayIndex("null in array expecting valid unions",
476 size, i)); 482 size, i));
477 } 483 }
478 } 484 }
479 485
480 static bool DeserializeElements(Data* input, 486 static bool DeserializeElements(Data* input,
481 UserType* output, 487 UserType* output,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 if (!input) 545 if (!input)
540 return CallSetToNullIfExists<Traits>(output); 546 return CallSetToNullIfExists<Traits>(output);
541 return Impl::DeserializeElements(input, output, context); 547 return Impl::DeserializeElements(input, output, context);
542 } 548 }
543 }; 549 };
544 550
545 } // namespace internal 551 } // namespace internal
546 } // namespace mojo 552 } // namespace mojo
547 553
548 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ 554 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/array_traits.h ('k') | mojo/public/cpp/bindings/lib/map_serialization.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698