1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ECMASCRIPT_TOOLING_BASE_PT_PARAMS_H 17 #define ECMASCRIPT_TOOLING_BASE_PT_PARAMS_H 18 19 #include "base/pt_types.h" 20 21 namespace panda::ecmascript::tooling { 22 class PtBaseParams : public PtBaseTypes { 23 public: 24 PtBaseParams() = default; 25 ~PtBaseParams() override = default; ToJson()26 std::unique_ptr<PtJson> ToJson() const override 27 { 28 UNREACHABLE(); 29 } 30 31 private: 32 NO_COPY_SEMANTIC(PtBaseParams); 33 NO_MOVE_SEMANTIC(PtBaseParams); 34 }; 35 36 class EnableParams : public PtBaseParams { 37 public: 38 EnableParams() = default; 39 ~EnableParams() override = default; 40 41 static std::unique_ptr<EnableParams> Create(const PtJson ¶ms); 42 GetMaxScriptsCacheSize()43 double GetMaxScriptsCacheSize() const 44 { 45 return maxScriptsCacheSize_.value_or(0); 46 } 47 HasMaxScriptsCacheSize()48 bool HasMaxScriptsCacheSize() const 49 { 50 return maxScriptsCacheSize_.has_value(); 51 } 52 53 private: 54 NO_COPY_SEMANTIC(EnableParams); 55 NO_MOVE_SEMANTIC(EnableParams); 56 57 std::optional<double> maxScriptsCacheSize_ {}; 58 }; 59 60 class EvaluateOnCallFrameParams : public PtBaseParams { 61 public: 62 EvaluateOnCallFrameParams() = default; 63 ~EvaluateOnCallFrameParams() override = default; 64 65 static std::unique_ptr<EvaluateOnCallFrameParams> Create(const PtJson ¶ms); 66 GetCallFrameId()67 CallFrameId GetCallFrameId() const 68 { 69 return callFrameId_; 70 } 71 GetExpression()72 const std::string &GetExpression() const 73 { 74 return expression_; 75 } 76 77 private: 78 NO_COPY_SEMANTIC(EvaluateOnCallFrameParams); 79 NO_MOVE_SEMANTIC(EvaluateOnCallFrameParams); 80 81 CallFrameId callFrameId_ {}; 82 std::string expression_ {}; 83 std::optional<std::string> objectGroup_ {}; 84 std::optional<bool> includeCommandLineAPI_ {}; 85 std::optional<bool> silent_ {}; 86 std::optional<bool> returnByValue_ {}; 87 std::optional<bool> generatePreview_ {}; 88 std::optional<bool> throwOnSideEffect_ {}; 89 }; 90 91 class GetPossibleBreakpointsParams : public PtBaseParams { 92 public: 93 GetPossibleBreakpointsParams() = default; 94 ~GetPossibleBreakpointsParams() override = default; 95 96 static std::unique_ptr<GetPossibleBreakpointsParams> Create(const PtJson ¶ms); 97 GetStart()98 Location *GetStart() const 99 { 100 return start_.get(); 101 } 102 GetEnd()103 Location *GetEnd() const 104 { 105 if (end_) { 106 return end_->get(); 107 } 108 return nullptr; 109 } 110 HasEnd()111 bool HasEnd() const 112 { 113 return end_.has_value(); 114 } 115 GetRestrictToFunction()116 bool GetRestrictToFunction() const 117 { 118 return restrictToFunction_.value_or(false); 119 } 120 HasRestrictToFunction()121 bool HasRestrictToFunction() const 122 { 123 return restrictToFunction_.has_value(); 124 } 125 126 private: 127 NO_COPY_SEMANTIC(GetPossibleBreakpointsParams); 128 NO_MOVE_SEMANTIC(GetPossibleBreakpointsParams); 129 130 std::unique_ptr<Location> start_ {nullptr}; 131 std::optional<std::unique_ptr<Location>> end_ {}; 132 std::optional<bool> restrictToFunction_ {}; 133 }; 134 135 class GetScriptSourceParams : public PtBaseParams { 136 public: 137 GetScriptSourceParams() = default; 138 ~GetScriptSourceParams() override = default; 139 140 static std::unique_ptr<GetScriptSourceParams> Create(const PtJson ¶ms); 141 GetScriptId()142 ScriptId GetScriptId() const 143 { 144 return scriptId_; 145 } 146 147 private: 148 NO_COPY_SEMANTIC(GetScriptSourceParams); 149 NO_MOVE_SEMANTIC(GetScriptSourceParams); 150 151 ScriptId scriptId_ {0}; 152 }; 153 154 class RemoveBreakpointParams : public PtBaseParams { 155 public: 156 RemoveBreakpointParams() = default; 157 ~RemoveBreakpointParams() override = default; 158 159 static std::unique_ptr<RemoveBreakpointParams> Create(const PtJson ¶ms); 160 GetBreakpointId()161 BreakpointId GetBreakpointId() const 162 { 163 return breakpointId_; 164 } 165 166 private: 167 NO_COPY_SEMANTIC(RemoveBreakpointParams); 168 NO_MOVE_SEMANTIC(RemoveBreakpointParams); 169 170 BreakpointId breakpointId_ {}; 171 }; 172 173 class ResumeParams : public PtBaseParams { 174 public: 175 ResumeParams() = default; 176 ~ResumeParams() override = default; 177 178 static std::unique_ptr<ResumeParams> Create(const PtJson ¶ms); 179 GetTerminateOnResume()180 bool GetTerminateOnResume() const 181 { 182 return terminateOnResume_.value_or(false); 183 } 184 HasTerminateOnResume()185 bool HasTerminateOnResume() const 186 { 187 return terminateOnResume_.has_value(); 188 } 189 190 private: 191 NO_COPY_SEMANTIC(ResumeParams); 192 NO_MOVE_SEMANTIC(ResumeParams); 193 194 std::optional<bool> terminateOnResume_ {}; 195 }; 196 197 class SetAsyncCallStackDepthParams : public PtBaseParams { 198 public: 199 SetAsyncCallStackDepthParams() = default; 200 ~SetAsyncCallStackDepthParams() override = default; 201 202 static std::unique_ptr<SetAsyncCallStackDepthParams> Create(const PtJson ¶ms); 203 GetMaxDepth()204 int32_t GetMaxDepth() const 205 { 206 return maxDepth_; 207 } 208 209 private: 210 NO_COPY_SEMANTIC(SetAsyncCallStackDepthParams); 211 NO_MOVE_SEMANTIC(SetAsyncCallStackDepthParams); 212 213 int32_t maxDepth_ {0}; 214 }; 215 216 class SetBlackboxPatternsParams : public PtBaseParams { 217 public: 218 SetBlackboxPatternsParams() = default; 219 ~SetBlackboxPatternsParams() override = default; 220 static std::unique_ptr<SetBlackboxPatternsParams> Create(const PtJson ¶ms); 221 GetPatterns()222 std::list<std::string> GetPatterns() const 223 { 224 return patterns_; 225 } 226 227 private: 228 NO_COPY_SEMANTIC(SetBlackboxPatternsParams); 229 NO_MOVE_SEMANTIC(SetBlackboxPatternsParams); 230 231 std::list<std::string> patterns_ {}; 232 }; 233 234 class SetBreakpointByUrlParams : public PtBaseParams { 235 public: 236 SetBreakpointByUrlParams() = default; 237 ~SetBreakpointByUrlParams() override = default; 238 239 static std::unique_ptr<SetBreakpointByUrlParams> Create(const PtJson ¶ms); 240 GetLine()241 int32_t GetLine() const 242 { 243 return lineNumber_; 244 } 245 GetUrl()246 const std::string &GetUrl() const 247 { 248 ASSERT(HasUrl()); 249 return url_.value(); 250 } 251 HasUrl()252 bool HasUrl() const 253 { 254 return url_.has_value(); 255 } 256 GetUrlRegex()257 const std::string &GetUrlRegex() const 258 { 259 ASSERT(HasUrlRegex()); 260 return urlRegex_.value(); 261 } 262 HasUrlRegex()263 bool HasUrlRegex() const 264 { 265 return urlRegex_.has_value(); 266 } 267 GetScriptHash()268 const std::string &GetScriptHash() const 269 { 270 ASSERT(HasScriptHash()); 271 return scriptHash_.value(); 272 } 273 HasScriptHash()274 bool HasScriptHash() const 275 { 276 return scriptHash_.has_value(); 277 } 278 GetColumn()279 int32_t GetColumn() const 280 { 281 return columnNumber_.value_or(0); 282 } 283 HasColumn()284 bool HasColumn() const 285 { 286 return columnNumber_.has_value(); 287 } 288 GetCondition()289 const std::string &GetCondition() const 290 { 291 ASSERT(HasCondition()); 292 return condition_.value(); 293 } 294 HasCondition()295 bool HasCondition() const 296 { 297 return condition_.has_value(); 298 } 299 300 private: 301 NO_COPY_SEMANTIC(SetBreakpointByUrlParams); 302 NO_MOVE_SEMANTIC(SetBreakpointByUrlParams); 303 304 int32_t lineNumber_ {0}; 305 std::optional<std::string> url_ {}; 306 std::optional<std::string> urlRegex_ {}; 307 std::optional<std::string> scriptHash_ {}; 308 std::optional<int32_t> columnNumber_ {0}; 309 std::optional<std::string> condition_ {}; 310 }; 311 312 enum class PauseOnExceptionsState : uint8_t { NONE, UNCAUGHT, ALL }; 313 314 class SetPauseOnExceptionsParams : public PtBaseParams { 315 public: 316 SetPauseOnExceptionsParams() = default; 317 ~SetPauseOnExceptionsParams() override = default; 318 static std::unique_ptr<SetPauseOnExceptionsParams> Create(const PtJson ¶ms); 319 GetState()320 PauseOnExceptionsState GetState() const 321 { 322 return state_; 323 } 324 StoreState(const std::string & state)325 bool StoreState(const std::string &state) 326 { 327 if (state == "none") { 328 state_ = PauseOnExceptionsState::NONE; 329 return true; 330 } 331 if (state == "uncaught") { 332 state_ = PauseOnExceptionsState::UNCAUGHT; 333 return true; 334 } 335 if (state == "all") { 336 state_ = PauseOnExceptionsState::ALL; 337 return true; 338 } 339 return false; 340 } 341 342 private: 343 NO_COPY_SEMANTIC(SetPauseOnExceptionsParams); 344 NO_MOVE_SEMANTIC(SetPauseOnExceptionsParams); 345 346 PauseOnExceptionsState state_ {PauseOnExceptionsState::ALL}; 347 }; 348 349 class StepIntoParams : public PtBaseParams { 350 public: 351 StepIntoParams() = default; 352 ~StepIntoParams() override = default; 353 354 static std::unique_ptr<StepIntoParams> Create(const PtJson ¶ms); 355 GetBreakOnAsyncCall()356 bool GetBreakOnAsyncCall() const 357 { 358 return breakOnAsyncCall_.value_or(false); 359 } 360 HasBreakOnAsyncCall()361 bool HasBreakOnAsyncCall() const 362 { 363 return breakOnAsyncCall_.has_value(); 364 } 365 GetSkipList()366 const std::list<std::unique_ptr<LocationRange>> *GetSkipList() const 367 { 368 if (!skipList_) { 369 return nullptr; 370 } 371 return &(skipList_.value()); 372 } 373 HasSkipList()374 bool HasSkipList() const 375 { 376 return skipList_.has_value(); 377 } 378 379 private: 380 NO_COPY_SEMANTIC(StepIntoParams); 381 NO_MOVE_SEMANTIC(StepIntoParams); 382 383 std::optional<bool> breakOnAsyncCall_ {}; 384 std::optional<std::list<std::unique_ptr<LocationRange>>> skipList_ {}; 385 }; 386 387 class StepOverParams : public PtBaseParams { 388 public: 389 StepOverParams() = default; 390 ~StepOverParams() override = default; 391 392 static std::unique_ptr<StepOverParams> Create(const PtJson ¶ms); 393 GetSkipList()394 const std::list<std::unique_ptr<LocationRange>> *GetSkipList() const 395 { 396 if (!skipList_) { 397 return nullptr; 398 } 399 return &(skipList_.value()); 400 } 401 HasSkipList()402 bool HasSkipList() const 403 { 404 return skipList_.has_value(); 405 } 406 407 private: 408 NO_COPY_SEMANTIC(StepOverParams); 409 NO_MOVE_SEMANTIC(StepOverParams); 410 411 std::optional<std::list<std::unique_ptr<LocationRange>>> skipList_ {}; 412 }; 413 414 class SetMixedDebugParams : public PtBaseParams { 415 public: 416 SetMixedDebugParams() = default; 417 ~SetMixedDebugParams() override = default; 418 static std::unique_ptr<SetMixedDebugParams> Create(const PtJson ¶ms); 419 GetEnabled()420 bool GetEnabled() const 421 { 422 return enabled_; 423 } 424 425 private: 426 NO_COPY_SEMANTIC(SetMixedDebugParams); 427 NO_MOVE_SEMANTIC(SetMixedDebugParams); 428 429 bool enabled_ { false }; 430 }; 431 432 class ReplyNativeCallingParams : public PtBaseParams { 433 public: 434 ReplyNativeCallingParams() = default; 435 ~ReplyNativeCallingParams() override = default; 436 static std::unique_ptr<ReplyNativeCallingParams> Create(const PtJson ¶ms); 437 GetUserCode()438 bool GetUserCode() const 439 { 440 return userCode_; 441 } 442 443 private: 444 NO_COPY_SEMANTIC(ReplyNativeCallingParams); 445 NO_MOVE_SEMANTIC(ReplyNativeCallingParams); 446 447 bool userCode_ { false }; 448 }; 449 450 class GetPropertiesParams : public PtBaseParams { 451 public: 452 GetPropertiesParams() = default; 453 ~GetPropertiesParams() override = default; 454 455 static std::unique_ptr<GetPropertiesParams> Create(const PtJson ¶ms); 456 GetObjectId()457 RemoteObjectId GetObjectId() const 458 { 459 return objectId_; 460 } 461 GetOwnProperties()462 bool GetOwnProperties() const 463 { 464 return ownProperties_.value_or(false); 465 } 466 HasOwnProperties()467 bool HasOwnProperties() const 468 { 469 return ownProperties_.has_value(); 470 } 471 GetAccessPropertiesOnly()472 bool GetAccessPropertiesOnly() const 473 { 474 return accessorPropertiesOnly_.value_or(false); 475 } 476 HasAccessPropertiesOnly()477 bool HasAccessPropertiesOnly() const 478 { 479 return accessorPropertiesOnly_.has_value(); 480 } 481 GetGeneratePreview()482 bool GetGeneratePreview() const 483 { 484 return generatePreview_.value_or(false); 485 } 486 HasGeneratePreview()487 bool HasGeneratePreview() const 488 { 489 return generatePreview_.has_value(); 490 } 491 492 private: 493 NO_COPY_SEMANTIC(GetPropertiesParams); 494 NO_MOVE_SEMANTIC(GetPropertiesParams); 495 496 RemoteObjectId objectId_ {}; 497 std::optional<bool> ownProperties_ {}; 498 std::optional<bool> accessorPropertiesOnly_ {}; 499 std::optional<bool> generatePreview_ {}; 500 }; 501 502 class CallFunctionOnParams : public PtBaseParams { 503 public: 504 CallFunctionOnParams() = default; 505 ~CallFunctionOnParams() override = default; 506 507 static std::unique_ptr<CallFunctionOnParams> Create(const PtJson ¶ms); 508 GetFunctionDeclaration()509 const std::string &GetFunctionDeclaration() 510 { 511 return functionDeclaration_; 512 } 513 GetObjectId()514 RemoteObjectId GetObjectId() const 515 { 516 return objectId_.value_or(-1); 517 } 518 SetObjectId(RemoteObjectId objectId)519 CallFunctionOnParams &SetObjectId(RemoteObjectId objectId) 520 { 521 objectId_ = objectId; 522 return *this; 523 } 524 HasObjectId()525 bool HasObjectId() const 526 { 527 return objectId_.has_value(); 528 } 529 GetArguments()530 const std::vector<std::unique_ptr<CallArgument>> *GetArguments() const 531 { 532 if (!arguments_) { 533 return nullptr; 534 } 535 return &(arguments_.value()); 536 } 537 HasArguments()538 bool HasArguments() const 539 { 540 return arguments_.has_value(); 541 } 542 GetSilent()543 bool GetSilent() const 544 { 545 return silent_.value_or(false); 546 } 547 HasSilent()548 bool HasSilent() const 549 { 550 return silent_.has_value(); 551 } 552 GetReturnByValue()553 bool GetReturnByValue() const 554 { 555 return returnByValue_.value_or(false); 556 } 557 HasReturnByValue()558 bool HasReturnByValue() const 559 { 560 return returnByValue_.has_value(); 561 } 562 GetGeneratePreview()563 bool GetGeneratePreview() const 564 { 565 return generatePreview_.value_or(false); 566 } 567 HasGeneratePreview()568 bool HasGeneratePreview() const 569 { 570 return generatePreview_.has_value(); 571 } 572 GetUserGesture()573 bool GetUserGesture() const 574 { 575 return userGesture_.value_or(false); 576 } 577 HasUserGesture()578 bool HasUserGesture() const 579 { 580 return userGesture_.has_value(); 581 } 582 GetAwaitPromise()583 bool GetAwaitPromise() const 584 { 585 return awaitPromise_.value_or(false); 586 } 587 HasAwaitPromise()588 bool HasAwaitPromise() const 589 { 590 return awaitPromise_.has_value(); 591 } 592 GetExecutionContextId()593 ExecutionContextId GetExecutionContextId() const 594 { 595 return executionContextId_.value_or(-1); 596 } 597 SetExecutionContextId(ExecutionContextId executionContextId)598 CallFunctionOnParams &SetExecutionContextId(ExecutionContextId executionContextId) 599 { 600 executionContextId_ = executionContextId; 601 return *this; 602 } 603 HasExecutionContextId()604 bool HasExecutionContextId() const 605 { 606 return executionContextId_.has_value(); 607 } 608 GetObjectGroup()609 const std::string &GetObjectGroup() const 610 { 611 ASSERT(HasObjectGroup()); 612 return objectGroup_.value(); 613 } 614 HasObjectGroup()615 bool HasObjectGroup() const 616 { 617 return objectGroup_.has_value(); 618 } 619 GetThrowOnSideEffect()620 bool GetThrowOnSideEffect() const 621 { 622 return throwOnSideEffect_.value_or(false); 623 } 624 HasThrowOnSideEffect()625 bool HasThrowOnSideEffect() const 626 { 627 return throwOnSideEffect_.has_value(); 628 } 629 630 private: 631 NO_COPY_SEMANTIC(CallFunctionOnParams); 632 NO_MOVE_SEMANTIC(CallFunctionOnParams); 633 634 std::string functionDeclaration_ {}; 635 std::optional<RemoteObjectId> objectId_ {}; 636 std::optional<std::vector<std::unique_ptr<CallArgument>>> arguments_ {}; 637 std::optional<bool> silent_ {}; 638 std::optional<bool> returnByValue_ {}; 639 std::optional<bool> generatePreview_ {}; 640 std::optional<bool> userGesture_ {}; 641 std::optional<bool> awaitPromise_ {}; 642 std::optional<ExecutionContextId> executionContextId_ {}; 643 std::optional<std::string> objectGroup_ {}; 644 std::optional<bool> throwOnSideEffect_ {}; 645 }; 646 647 class StartSamplingParams : public PtBaseParams { 648 public: 649 StartSamplingParams() = default; 650 ~StartSamplingParams() override = default; 651 652 static std::unique_ptr<StartSamplingParams> Create(const PtJson ¶ms); 653 GetSamplingInterval()654 int32_t GetSamplingInterval() const 655 { 656 return samplingInterval_.value_or(32768); 657 } 658 659 private: 660 NO_COPY_SEMANTIC(StartSamplingParams); 661 NO_MOVE_SEMANTIC(StartSamplingParams); 662 663 std::optional<int32_t> samplingInterval_ {32768}; 664 }; 665 666 class StartTrackingHeapObjectsParams : public PtBaseParams { 667 public: 668 StartTrackingHeapObjectsParams() = default; 669 ~StartTrackingHeapObjectsParams() override = default; 670 671 static std::unique_ptr<StartTrackingHeapObjectsParams> Create(const PtJson ¶ms); 672 GetTrackAllocations()673 bool GetTrackAllocations() const 674 { 675 return trackAllocations_.value_or(false); 676 } 677 HasTrackAllocations()678 bool HasTrackAllocations() const 679 { 680 return trackAllocations_.has_value(); 681 } 682 683 private: 684 NO_COPY_SEMANTIC(StartTrackingHeapObjectsParams); 685 NO_MOVE_SEMANTIC(StartTrackingHeapObjectsParams); 686 687 std::optional<bool> trackAllocations_; 688 }; 689 690 class StopTrackingHeapObjectsParams : public PtBaseParams { 691 public: 692 StopTrackingHeapObjectsParams() = default; 693 ~StopTrackingHeapObjectsParams() override = default; 694 695 static std::unique_ptr<StopTrackingHeapObjectsParams> Create(const PtJson ¶ms); 696 GetReportProgress()697 bool GetReportProgress() const 698 { 699 return reportProgress_.value_or(false); 700 } 701 HasReportProgress()702 bool HasReportProgress() const 703 { 704 return reportProgress_.has_value(); 705 } 706 GetTreatGlobalObjectsAsRoots()707 bool GetTreatGlobalObjectsAsRoots() const 708 { 709 return treatGlobalObjectsAsRoots_.value_or(false); 710 } 711 HasTreatGlobalObjectsAsRoots()712 bool HasTreatGlobalObjectsAsRoots() const 713 { 714 return treatGlobalObjectsAsRoots_.has_value(); 715 } 716 GetCaptureNumericValue()717 bool GetCaptureNumericValue() const 718 { 719 return captureNumericValue_.value_or(false); 720 } 721 HasCaptureNumericValue()722 bool HasCaptureNumericValue() const 723 { 724 return captureNumericValue_.has_value(); 725 } 726 727 private: 728 NO_COPY_SEMANTIC(StopTrackingHeapObjectsParams); 729 NO_MOVE_SEMANTIC(StopTrackingHeapObjectsParams); 730 731 std::optional<bool> reportProgress_ {}; 732 std::optional<bool> treatGlobalObjectsAsRoots_ {}; 733 std::optional<bool> captureNumericValue_ {}; 734 }; 735 736 class AddInspectedHeapObjectParams : public PtBaseParams { 737 public: 738 AddInspectedHeapObjectParams() = default; 739 ~AddInspectedHeapObjectParams() override = default; 740 741 static std::unique_ptr<AddInspectedHeapObjectParams> Create(const PtJson ¶ms); 742 GetHeapObjectId()743 HeapSnapshotObjectId GetHeapObjectId() const 744 { 745 return heapObjectId_; 746 } 747 748 private: 749 NO_COPY_SEMANTIC(AddInspectedHeapObjectParams); 750 NO_MOVE_SEMANTIC(AddInspectedHeapObjectParams); 751 752 HeapSnapshotObjectId heapObjectId_ {}; 753 }; 754 755 class GetHeapObjectIdParams : public PtBaseParams { 756 public: 757 GetHeapObjectIdParams() = default; 758 ~GetHeapObjectIdParams() override = default; 759 760 static std::unique_ptr<GetHeapObjectIdParams> Create(const PtJson ¶ms); 761 GetObjectId()762 RemoteObjectId GetObjectId() const 763 { 764 return objectId_; 765 } 766 767 private: 768 NO_COPY_SEMANTIC(GetHeapObjectIdParams); 769 NO_MOVE_SEMANTIC(GetHeapObjectIdParams); 770 771 RemoteObjectId objectId_ {}; 772 }; 773 774 class GetObjectByHeapObjectIdParams : public PtBaseParams { 775 public: 776 GetObjectByHeapObjectIdParams() = default; 777 ~GetObjectByHeapObjectIdParams() override = default; 778 779 static std::unique_ptr<GetObjectByHeapObjectIdParams> Create(const PtJson ¶ms); 780 GetObjectId()781 HeapSnapshotObjectId GetObjectId() const 782 { 783 return objectId_; 784 } 785 GetObjectGroup()786 const std::string &GetObjectGroup() const 787 { 788 ASSERT(HasObjectGroup()); 789 return objectGroup_.value(); 790 } 791 HasObjectGroup()792 bool HasObjectGroup() const 793 { 794 return objectGroup_.has_value(); 795 } 796 797 private: 798 NO_COPY_SEMANTIC(GetObjectByHeapObjectIdParams); 799 NO_MOVE_SEMANTIC(GetObjectByHeapObjectIdParams); 800 801 HeapSnapshotObjectId objectId_ {}; 802 std::optional<std::string> objectGroup_ {}; 803 }; 804 805 class StartPreciseCoverageParams : public PtBaseParams { 806 public: 807 StartPreciseCoverageParams() = default; 808 ~StartPreciseCoverageParams() override = default; 809 810 static std::unique_ptr<StartPreciseCoverageParams> Create(const PtJson ¶ms); 811 GetCallCount()812 bool GetCallCount() const 813 { 814 return callCount_.value_or(false); 815 } 816 HasCallCount()817 bool HasCallCount() const 818 { 819 return callCount_.has_value(); 820 } 821 GetDetailed()822 bool GetDetailed() const 823 { 824 return detailed_.value_or(false); 825 } 826 HasDetailed()827 bool HasDetailed() const 828 { 829 return detailed_.has_value(); 830 } 831 GetAllowTriggeredUpdates()832 bool GetAllowTriggeredUpdates() const 833 { 834 return allowTriggeredUpdates_.value_or(false); 835 } 836 HasAllowTriggeredUpdates()837 bool HasAllowTriggeredUpdates() const 838 { 839 return allowTriggeredUpdates_.has_value(); 840 } 841 842 private: 843 NO_COPY_SEMANTIC(StartPreciseCoverageParams); 844 NO_MOVE_SEMANTIC(StartPreciseCoverageParams); 845 846 std::optional<bool> callCount_ {}; 847 std::optional<bool> detailed_ {}; 848 std::optional<bool> allowTriggeredUpdates_ {}; 849 }; 850 851 class SetSamplingIntervalParams : public PtBaseParams { 852 public: 853 SetSamplingIntervalParams() = default; 854 ~SetSamplingIntervalParams() override = default; 855 856 static std::unique_ptr<SetSamplingIntervalParams> Create(const PtJson ¶ms); 857 GetInterval()858 int32_t GetInterval() const 859 { 860 return interval_; 861 } 862 SetInterval(int32_t interval)863 SetSamplingIntervalParams &SetInterval(int32_t interval) 864 { 865 interval_ = interval; 866 return *this; 867 } 868 869 private: 870 NO_COPY_SEMANTIC(SetSamplingIntervalParams); 871 NO_MOVE_SEMANTIC(SetSamplingIntervalParams); 872 873 int32_t interval_ {0}; 874 }; 875 876 class RecordClockSyncMarkerParams : public PtBaseParams { 877 public: 878 RecordClockSyncMarkerParams() = default; 879 ~RecordClockSyncMarkerParams() override = default; 880 881 static std::unique_ptr<RecordClockSyncMarkerParams> Create(const PtJson ¶ms); 882 GetSyncId()883 std::string GetSyncId() const 884 { 885 return syncId_; 886 } 887 SetSyncId(std::string syncId)888 RecordClockSyncMarkerParams &SetSyncId(std::string syncId) 889 { 890 syncId_ = syncId; 891 return *this; 892 } 893 894 private: 895 NO_COPY_SEMANTIC(RecordClockSyncMarkerParams); 896 NO_MOVE_SEMANTIC(RecordClockSyncMarkerParams); 897 898 std::string syncId_ {}; 899 }; 900 901 class RequestMemoryDumpParams : public PtBaseParams { 902 public: 903 RequestMemoryDumpParams() = default; 904 ~RequestMemoryDumpParams() override = default; 905 906 static std::unique_ptr<RequestMemoryDumpParams> Create(const PtJson ¶ms); 907 GetDeterministic()908 bool GetDeterministic() const 909 { 910 return deterministic_.value(); 911 } 912 SetDeterministic(bool deterministic)913 RequestMemoryDumpParams &SetDeterministic(bool deterministic) 914 { 915 deterministic_ = deterministic; 916 return *this; 917 } 918 HasDeterministic()919 bool HasDeterministic() const 920 { 921 return deterministic_.has_value(); 922 } 923 GetLevelOfDetail()924 MemoryDumpLevelOfDetail GetLevelOfDetail() const 925 { 926 return levelOfDetail_.value(); 927 } 928 SetLevelOfDetail(const MemoryDumpLevelOfDetail & levelOfDetail)929 RequestMemoryDumpParams &SetLevelOfDetail(const MemoryDumpLevelOfDetail &levelOfDetail) 930 { 931 levelOfDetail_ = levelOfDetail; 932 return *this; 933 } 934 HasLevelOfDetail()935 bool HasLevelOfDetail() const 936 { 937 return levelOfDetail_.has_value(); 938 } 939 940 private: 941 NO_COPY_SEMANTIC(RequestMemoryDumpParams); 942 NO_MOVE_SEMANTIC(RequestMemoryDumpParams); 943 944 std::optional<bool> deterministic_ {}; 945 std::optional<MemoryDumpLevelOfDetail> levelOfDetail_ {}; 946 }; 947 948 class StartParams : public PtBaseParams { 949 public: 950 StartParams() = default; 951 ~StartParams() override = default; 952 953 static std::unique_ptr<StartParams> Create(const PtJson ¶ms); 954 GetCategories()955 std::string GetCategories() const 956 { 957 return categories_.value(); 958 } 959 SetCategories(std::string categories)960 StartParams &SetCategories(std::string categories) 961 { 962 categories_ = categories; 963 return *this; 964 } 965 HasCategories()966 bool HasCategories() const 967 { 968 return categories_.has_value(); 969 } 970 GetOptions()971 std::string GetOptions() const 972 { 973 return options_.value(); 974 } 975 SetOptions(std::string options)976 StartParams &SetOptions(std::string options) 977 { 978 options_ = options; 979 return *this; 980 } 981 HasOptions()982 bool HasOptions() const 983 { 984 return options_.has_value(); 985 } 986 GetBufferUsageReportingInterval()987 int32_t GetBufferUsageReportingInterval() const 988 { 989 return bufferUsageReportingInterval_.value(); 990 } 991 SetBufferUsageReportingInterval(int32_t bufferUsageReportingInterval)992 StartParams &SetBufferUsageReportingInterval(int32_t bufferUsageReportingInterval) 993 { 994 bufferUsageReportingInterval_ = bufferUsageReportingInterval; 995 return *this; 996 } 997 HasBufferUsageReportingInterval()998 bool HasBufferUsageReportingInterval() const 999 { 1000 return bufferUsageReportingInterval_.has_value(); 1001 } 1002 GetTransferMode()1003 std::string GetTransferMode() const 1004 { 1005 return transferMode_.value(); 1006 } 1007 SetTransferMode(std::string transferMode)1008 StartParams &SetTransferMode(std::string transferMode) 1009 { 1010 transferMode_ = transferMode; 1011 return *this; 1012 } 1013 HasTransferMode()1014 bool HasTransferMode() const 1015 { 1016 return transferMode_.has_value(); 1017 } 1018 1019 struct TransferModeValues { ValidTransferModeValues1020 static bool Valid(const std::string &values) 1021 { 1022 return values == ReportEvents() || values == ReturnAsStream(); 1023 } ReportEventsTransferModeValues1024 static std::string ReportEvents() 1025 { 1026 return "ReportEvents"; 1027 } ReturnAsStreamTransferModeValues1028 static std::string ReturnAsStream() 1029 { 1030 return "ReturnAsStream"; 1031 } 1032 }; 1033 GetStreamFormat()1034 StreamFormat GetStreamFormat() const 1035 { 1036 return streamFormat_.value(); 1037 } 1038 SetStreamFormat(const StreamFormat & streamFormat)1039 StartParams &SetStreamFormat(const StreamFormat &streamFormat) 1040 { 1041 streamFormat_ = streamFormat; 1042 return *this; 1043 } 1044 HasStreamFormat()1045 bool HasStreamFormat() const 1046 { 1047 return streamFormat_.has_value(); 1048 } 1049 GetStreamCompression()1050 StreamCompression GetStreamCompression() const 1051 { 1052 return streamCompression_.value(); 1053 } 1054 SetStreamCompression(const StreamCompression & streamCompression)1055 StartParams &SetStreamCompression(const StreamCompression &streamCompression) 1056 { 1057 streamCompression_ = streamCompression; 1058 return *this; 1059 } 1060 HasStreamCompression()1061 bool HasStreamCompression() const 1062 { 1063 return streamCompression_.has_value(); 1064 } 1065 GetTraceConfig()1066 TraceConfig *GetTraceConfig() const 1067 { 1068 if (traceConfig_) { 1069 return traceConfig_->get(); 1070 } 1071 return nullptr; 1072 } 1073 SetTraceConfig(std::unique_ptr<TraceConfig> & traceConfig)1074 StartParams &SetTraceConfig(std::unique_ptr<TraceConfig> &traceConfig) 1075 { 1076 traceConfig_ = std::move(traceConfig); 1077 return *this; 1078 } 1079 HasTraceConfig()1080 bool HasTraceConfig() const 1081 { 1082 return traceConfig_.has_value(); 1083 } 1084 GetPerfettoConfig()1085 std::string GetPerfettoConfig() const 1086 { 1087 return perfettoConfig_.value(); 1088 } 1089 SetPerfettoConfig(std::string perfettoConfig)1090 StartParams &SetPerfettoConfig(std::string perfettoConfig) 1091 { 1092 perfettoConfig_ = perfettoConfig; 1093 return *this; 1094 } 1095 HasPerfettoConfig()1096 bool HasPerfettoConfig() const 1097 { 1098 return perfettoConfig_.has_value(); 1099 } 1100 GetTracingBackend()1101 TracingBackend GetTracingBackend() const 1102 { 1103 return tracingBackend_.value(); 1104 } 1105 SetTracingBackend(const TracingBackend & tracingBackend)1106 StartParams &SetTracingBackend(const TracingBackend &tracingBackend) 1107 { 1108 tracingBackend_ = tracingBackend; 1109 return *this; 1110 } 1111 HasTracingBackend()1112 bool HasTracingBackend() const 1113 { 1114 return tracingBackend_.has_value(); 1115 } 1116 1117 private: 1118 NO_COPY_SEMANTIC(StartParams); 1119 NO_MOVE_SEMANTIC(StartParams); 1120 1121 std::optional<std::string> categories_ {}; 1122 std::optional<std::string> options_ {}; 1123 std::optional<int32_t> bufferUsageReportingInterval_ {0}; 1124 std::optional<std::string> transferMode_ {}; 1125 std::optional<StreamFormat> streamFormat_ {}; 1126 std::optional<StreamCompression> streamCompression_ {}; 1127 std::optional<std::unique_ptr<TraceConfig>> traceConfig_ {}; 1128 std::optional<std::string> perfettoConfig_ {}; 1129 std::optional<TracingBackend> tracingBackend_ {}; 1130 }; 1131 } // namespace panda::ecmascript::tooling 1132 #endif