• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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 &params);
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