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

Side by Side Diff: src/api.h

Issue 1741893003: Introduce v8::MicrotasksScope. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Merged scopes Created 4 years, 9 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project 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 V8_API_H_ 5 #ifndef V8_API_H_
6 #define V8_API_H_ 6 #define V8_API_H_
7 7
8 #include "include/v8-testing.h" 8 #include "include/v8-testing.h"
9 #include "src/contexts.h" 9 #include "src/contexts.h"
10 #include "src/factory.h" 10 #include "src/factory.h"
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 DeferredHandles* next_; 427 DeferredHandles* next_;
428 DeferredHandles* previous_; 428 DeferredHandles* previous_;
429 Object** first_block_limit_; 429 Object** first_block_limit_;
430 Isolate* isolate_; 430 Isolate* isolate_;
431 431
432 friend class HandleScopeImplementer; 432 friend class HandleScopeImplementer;
433 friend class Isolate; 433 friend class Isolate;
434 }; 434 };
435 435
436 436
437 // Microtasks invocation policy. Keep in sync with v8::Isolate::MicrotasksPolicy
438 enum MicrotasksPolicy {
jochen (gone - plz use gerrit) 2016/03/01 14:26:08 why not just use the public version?
dgozman 2016/03/03 01:22:06 Done.
439 kExplicitMicrotasksInvocation,
440 kScopedMicrotasksInvocation,
441 kAutoMicrotasksInvocation
442 };
443
444
437 // This class is here in order to be able to declare it a friend of 445 // This class is here in order to be able to declare it a friend of
438 // HandleScope. Moving these methods to be members of HandleScope would be 446 // HandleScope. Moving these methods to be members of HandleScope would be
439 // neat in some ways, but it would expose internal implementation details in 447 // neat in some ways, but it would expose internal implementation details in
440 // our public header file, which is undesirable. 448 // our public header file, which is undesirable.
441 // 449 //
442 // An isolate has a single instance of this class to hold the current thread's 450 // An isolate has a single instance of this class to hold the current thread's
443 // data. In multithreaded V8 programs this data is copied in and out of storage 451 // data. In multithreaded V8 programs this data is copied in and out of storage
444 // so that the currently executing thread always has its own copy of this 452 // so that the currently executing thread always has its own copy of this
445 // data. 453 // data.
446 class HandleScopeImplementer { 454 class HandleScopeImplementer {
447 public: 455 public:
448 explicit HandleScopeImplementer(Isolate* isolate) 456 explicit HandleScopeImplementer(Isolate* isolate)
449 : isolate_(isolate), 457 : isolate_(isolate),
450 blocks_(0), 458 blocks_(0),
451 entered_contexts_(0), 459 entered_contexts_(0),
452 saved_contexts_(0), 460 saved_contexts_(0),
453 spare_(NULL), 461 spare_(NULL),
454 call_depth_(0), 462 call_depth_(0),
463 microtasks_suppression_(0),
464 #ifdef V8_ENABLE_CHECKS
465 debug_call_depth_(0),
466 #endif
467 internal_call_depth_(0),
468 microtasks_policy_(kAutoMicrotasksInvocation),
455 last_handle_before_deferred_block_(NULL) { } 469 last_handle_before_deferred_block_(NULL) { }
456 470
457 ~HandleScopeImplementer() { 471 ~HandleScopeImplementer() {
458 DeleteArray(spare_); 472 DeleteArray(spare_);
459 } 473 }
460 474
461 // Threading support for handle data. 475 // Threading support for handle data.
462 static int ArchiveSpacePerThread(); 476 static int ArchiveSpacePerThread();
463 char* RestoreThread(char* from); 477 char* RestoreThread(char* from);
464 char* ArchiveThread(char* to); 478 char* ArchiveThread(char* to);
465 void FreeThreadResources(); 479 void FreeThreadResources();
466 480
467 // Garbage collection support. 481 // Garbage collection support.
468 void Iterate(v8::internal::ObjectVisitor* v); 482 void Iterate(v8::internal::ObjectVisitor* v);
469 static char* Iterate(v8::internal::ObjectVisitor* v, char* data); 483 static char* Iterate(v8::internal::ObjectVisitor* v, char* data);
470 484
471 485
472 inline internal::Object** GetSpareOrNewBlock(); 486 inline internal::Object** GetSpareOrNewBlock();
473 inline void DeleteExtensions(internal::Object** prev_limit); 487 inline void DeleteExtensions(internal::Object** prev_limit);
474 488
475 inline void IncrementCallDepth() {call_depth_++;} 489 inline void IncrementCallDepth() {call_depth_++;}
adamk 2016/03/01 19:10:34 Given the below new types of "call depth", I think
476 inline void DecrementCallDepth() {call_depth_--;} 490 inline void DecrementCallDepth() {call_depth_--;}
477 inline bool CallDepthIsZero() { return call_depth_ == 0; } 491 inline int GetCallDepth() { return call_depth_; }
492
493 inline void IncrementMicrotasksSuppression() {microtasks_suppression_++;}
adamk 2016/03/01 19:10:34 This could use a comment, what is this counter for
494 inline void DecrementMicrotasksSuppression() {microtasks_suppression_--;}
495 inline bool GetMicrotasksSuppression() { return microtasks_suppression_; }
496
497 #ifdef V8_ENABLE_CHECKS
498 inline void IncrementDebugCallDepth() {debug_call_depth_++;}
adamk 2016/03/01 19:10:34 Please add comments, what's a "debug call depth"?
499 inline void DecrementDebugCallDepth() {debug_call_depth_--;}
500 inline bool GetDebugCallDepth() { return debug_call_depth_; }
501 #endif
502
503 inline void IncrementInternalCallDepth() {internal_call_depth_++;}
adamk 2016/03/01 19:10:34 Same here, what's an "internal call depth"?
504 inline void DecrementInternalCallDepth() {internal_call_depth_--;}
505 inline bool GetInternalCallDepth() { return internal_call_depth_; }
506
507 inline void set_microtasks_policy(MicrotasksPolicy policy);
508 inline MicrotasksPolicy microtasks_policy() const;
478 509
479 inline void EnterContext(Handle<Context> context); 510 inline void EnterContext(Handle<Context> context);
480 inline void LeaveContext(); 511 inline void LeaveContext();
481 inline bool LastEnteredContextWas(Handle<Context> context); 512 inline bool LastEnteredContextWas(Handle<Context> context);
482 513
483 // Returns the last entered context or an empty handle if no 514 // Returns the last entered context or an empty handle if no
484 // contexts have been entered. 515 // contexts have been entered.
485 inline Handle<Context> LastEnteredContext(); 516 inline Handle<Context> LastEnteredContext();
486 517
487 inline void SaveContext(Context* context); 518 inline void SaveContext(Context* context);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 DeferredHandles* Detach(Object** prev_limit); 556 DeferredHandles* Detach(Object** prev_limit);
526 557
527 Isolate* isolate_; 558 Isolate* isolate_;
528 List<internal::Object**> blocks_; 559 List<internal::Object**> blocks_;
529 // Used as a stack to keep track of entered contexts. 560 // Used as a stack to keep track of entered contexts.
530 List<Context*> entered_contexts_; 561 List<Context*> entered_contexts_;
531 // Used as a stack to keep track of saved contexts. 562 // Used as a stack to keep track of saved contexts.
532 List<Context*> saved_contexts_; 563 List<Context*> saved_contexts_;
533 Object** spare_; 564 Object** spare_;
534 int call_depth_; 565 int call_depth_;
566 int microtasks_suppression_;
567 #ifdef V8_ENABLE_CHECKS
568 int debug_call_depth_;
569 #endif
570 int internal_call_depth_;
571 MicrotasksPolicy microtasks_policy_;
535 Object** last_handle_before_deferred_block_; 572 Object** last_handle_before_deferred_block_;
536 // This is only used for threading support. 573 // This is only used for threading support.
537 HandleScopeData handle_scope_data_; 574 HandleScopeData handle_scope_data_;
538 575
539 void IterateThis(ObjectVisitor* v); 576 void IterateThis(ObjectVisitor* v);
540 char* RestoreThreadHelper(char* from); 577 char* RestoreThreadHelper(char* from);
541 char* ArchiveThreadHelper(char* to); 578 char* ArchiveThreadHelper(char* to);
542 579
543 friend class DeferredHandles; 580 friend class DeferredHandles;
544 friend class DeferredHandleScope; 581 friend class DeferredHandleScope;
545 582
546 DISALLOW_COPY_AND_ASSIGN(HandleScopeImplementer); 583 DISALLOW_COPY_AND_ASSIGN(HandleScopeImplementer);
547 }; 584 };
548 585
549 586
550 const int kHandleBlockSize = v8::internal::KB - 2; // fit in one page 587 const int kHandleBlockSize = v8::internal::KB - 2; // fit in one page
551 588
552 589
590 void HandleScopeImplementer::set_microtasks_policy(MicrotasksPolicy policy) {
591 microtasks_policy_ = policy;
592 }
593
594
595 MicrotasksPolicy HandleScopeImplementer::microtasks_policy() const {
596 return microtasks_policy_;
597 }
598
599
553 void HandleScopeImplementer::SaveContext(Context* context) { 600 void HandleScopeImplementer::SaveContext(Context* context) {
554 saved_contexts_.Add(context); 601 saved_contexts_.Add(context);
555 } 602 }
556 603
557 604
558 Context* HandleScopeImplementer::RestoreContext() { 605 Context* HandleScopeImplementer::RestoreContext() {
559 return saved_contexts_.RemoveLast(); 606 return saved_contexts_.RemoveLast();
560 } 607 }
561 608
562 609
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 } 688 }
642 689
643 private: 690 private:
644 static v8::Testing::StressType stress_type_; 691 static v8::Testing::StressType stress_type_;
645 }; 692 };
646 693
647 } // namespace internal 694 } // namespace internal
648 } // namespace v8 695 } // namespace v8
649 696
650 #endif // V8_API_H_ 697 #endif // V8_API_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698