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

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: Delete quads.typemap 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 Serialize<Element>(input->GetNext(), &output->at(i), context);
yzshen1 2016/07/28 18:25:19 We need to do typename UserTypeIterator::GetNextRe
Fady Samuel 2016/07/28 19:53:31 Done.
310 310
311 static const ValidationError kError = 311 static const ValidationError kError =
312 BelongsTo<Element, 312 BelongsTo<Element,
313 MojomTypeCategory::ASSOCIATED_INTERFACE | 313 MojomTypeCategory::ASSOCIATED_INTERFACE |
314 MojomTypeCategory::ASSOCIATED_INTERFACE_REQUEST>::value 314 MojomTypeCategory::ASSOCIATED_INTERFACE_REQUEST>::value
315 ? VALIDATION_ERROR_UNEXPECTED_INVALID_INTERFACE_ID 315 ? VALIDATION_ERROR_UNEXPECTED_INVALID_INTERFACE_ID
316 : VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE; 316 : VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE;
317 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 317 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
318 !validate_params->element_is_nullable && 318 !validate_params->element_is_nullable &&
319 !IsHandleOrInterfaceValid(output->at(i)), 319 !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; 354 using UserType = typename std::remove_const<MaybeConstUserType>::type;
355 using Data = typename MojomTypeTraits<MojomType>::Data; 355 using Data = typename MojomTypeTraits<MojomType>::Data;
356 using Element = typename MojomType::Element; 356 using Element = typename MojomType::Element;
357 using DataElementPtr = typename MojomTypeTraits<Element>::Data*; 357 using DataElementPtr = typename MojomTypeTraits<Element>::Data*;
358 using Traits = ArrayTraits<UserType>; 358 using Traits = ArrayTraits<UserType>;
359 359
360 static size_t GetSerializedSize(UserTypeIterator* input, 360 static size_t GetSerializedSize(UserTypeIterator* input,
361 SerializationContext* context) { 361 SerializationContext* context) {
362 size_t element_count = input->GetSize(); 362 size_t element_count = input->GetSize();
363 size_t size = sizeof(Data) + element_count * sizeof(typename Data::Element); 363 size_t size = sizeof(Data) + element_count * sizeof(typename Data::Element);
364 for (size_t i = 0; i < element_count; ++i) 364 for (size_t i = 0; i < element_count; ++i) {
365 size += PrepareToSerialize<Element>(input->GetNext(), context); 365 typename UserTypeIterator::GetNextResult next = input->GetNext();
yzshen1 2016/07/28 18:25:19 Please also update the documentation of array_trai
Fady Samuel 2016/07/28 19:53:31 Done.
366 size += PrepareToSerialize<Element>(next, context);
367 }
366 return size; 368 return size;
367 } 369 }
368 370
369 static void SerializeElements(UserTypeIterator* input, 371 static void SerializeElements(UserTypeIterator* input,
370 Buffer* buf, 372 Buffer* buf,
371 Data* output, 373 Data* output,
372 const ContainerValidateParams* validate_params, 374 const ContainerValidateParams* validate_params,
373 SerializationContext* context) { 375 SerializationContext* context) {
374 size_t size = input->GetSize(); 376 size_t size = input->GetSize();
375 for (size_t i = 0; i < size; ++i) { 377 for (size_t i = 0; i < size; ++i) {
376 DataElementPtr data_ptr; 378 DataElementPtr data_ptr;
377 SerializeCaller<Element>::Run(input->GetNext(), buf, &data_ptr, 379 typename UserTypeIterator::GetNextResult next = input->GetNext();
380 SerializeCaller<Element>::Run(next, buf, &data_ptr,
378 validate_params->element_validate_params, 381 validate_params->element_validate_params,
379 context); 382 context);
380 output->at(i).Set(data_ptr); 383 output->at(i).Set(data_ptr);
381 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 384 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
382 !validate_params->element_is_nullable && !data_ptr, 385 !validate_params->element_is_nullable && !data_ptr,
383 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, 386 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
384 MakeMessageWithArrayIndex("null in array expecting valid pointers", 387 MakeMessageWithArrayIndex("null in array expecting valid pointers",
385 size, i)); 388 size, i));
386 } 389 }
387 } 390 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 typename Traits::Element>::value, 451 typename Traits::Element>::value,
449 "Incorrect array serializer"); 452 "Incorrect array serializer");
450 453
451 static size_t GetSerializedSize(UserTypeIterator* input, 454 static size_t GetSerializedSize(UserTypeIterator* input,
452 SerializationContext* context) { 455 SerializationContext* context) {
453 size_t element_count = input->GetSize(); 456 size_t element_count = input->GetSize();
454 size_t size = sizeof(Data); 457 size_t size = sizeof(Data);
455 for (size_t i = 0; i < element_count; ++i) { 458 for (size_t i = 0; i < element_count; ++i) {
456 // Call with |inlined| set to false, so that it will account for both the 459 // 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. 460 // data in the union and the space in the array used to hold the union.
458 size += PrepareToSerialize<Element>(input->GetNext(), false, context); 461 size += PrepareToSerialize<Element>(input->GetNext(), false, context);
yzshen1 2016/07/28 18:25:19 Please also do typename UserTypeIterator::GetNextR
Fady Samuel 2016/07/28 19:53:31 Done.
459 } 462 }
460 return size; 463 return size;
461 } 464 }
462 465
463 static void SerializeElements(UserTypeIterator* input, 466 static void SerializeElements(UserTypeIterator* input,
464 Buffer* buf, 467 Buffer* buf,
465 Data* output, 468 Data* output,
466 const ContainerValidateParams* validate_params, 469 const ContainerValidateParams* validate_params,
467 SerializationContext* context) { 470 SerializationContext* context) {
468 size_t size = input->GetSize(); 471 size_t size = input->GetSize();
469 for (size_t i = 0; i < size; ++i) { 472 for (size_t i = 0; i < size; ++i) {
470 typename Data::Element* result = output->storage() + i; 473 typename Data::Element* result = output->storage() + i;
471 Serialize<Element>(input->GetNext(), buf, &result, true, context); 474 Serialize<Element>(input->GetNext(), buf, &result, true, context);
yzshen1 2016/07/28 18:25:19 typename UserTypeIterator::GetNextResult next = in
Fady Samuel 2016/07/28 19:53:32 Done.
472 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 475 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
473 !validate_params->element_is_nullable && output->at(i).is_null(), 476 !validate_params->element_is_nullable && output->at(i).is_null(),
474 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, 477 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
475 MakeMessageWithArrayIndex("null in array expecting valid unions", 478 MakeMessageWithArrayIndex("null in array expecting valid unions",
476 size, i)); 479 size, i));
477 } 480 }
478 } 481 }
479 482
480 static bool DeserializeElements(Data* input, 483 static bool DeserializeElements(Data* input,
481 UserType* output, 484 UserType* output,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 if (!input) 542 if (!input)
540 return CallSetToNullIfExists<Traits>(output); 543 return CallSetToNullIfExists<Traits>(output);
541 return Impl::DeserializeElements(input, output, context); 544 return Impl::DeserializeElements(input, output, context);
542 } 545 }
543 }; 546 };
544 547
545 } // namespace internal 548 } // namespace internal
546 } // namespace mojo 549 } // namespace mojo
547 550
548 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ 551 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698