• 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 package ohos.devtools.views.distributed.bean;
17 
18 import ohos.devtools.views.applicationtrace.util.TimeUtils;
19 import ohos.devtools.views.distributed.component.DistributedTracePanel;
20 import ohos.devtools.views.distributed.util.DistributedCommon;
21 import ohos.devtools.views.trace.AbstractNode;
22 import ohos.devtools.views.trace.DField;
23 import ohos.devtools.views.trace.EventDispatcher;
24 import ohos.devtools.views.trace.util.ColorUtils;
25 import ohos.devtools.views.trace.util.Utils;
26 
27 import java.awt.Color;
28 import java.awt.Graphics2D;
29 import java.awt.Rectangle;
30 import java.awt.event.MouseEvent;
31 import java.util.Arrays;
32 import java.util.List;
33 import java.util.Objects;
34 
35 /**
36  * DistributedFuncBean
37  *
38  * @since 2021/5/19 16:39
39  */
40 public class DistributedFuncBean extends AbstractNode {
41     /**
42      * currentSelectedFunc current select func
43      */
44     public static DistributedFuncBean currentSelectedFunc;
45 
46     @DField(name = "id")
47     private Integer id;
48     @DField(name = "parent_id")
49     private Integer parentId;
50     @DField(name = "is_main_thread")
51     private Integer isMainThread;
52     @DField(name = "track_id")
53     private Integer trackId;
54     @DField(name = "funName")
55     private String funcName = "";
56     @DField(name = "tid")
57     private Integer tid;
58     @DField(name = "depth")
59     private Integer depth = 0;
60     @DField(name = "threadName")
61     private String threadName = "";
62     @DField(name = "startTs")
63     private long startTs;
64     @DField(name = "dur")
65     private long dur;
66     @DField(name = "chainId")
67     private String chainId;
68     @DField(name = "spanId")
69     private Integer spanId;
70     @DField(name = "parentSpanId")
71     private Integer parentSpanId;
72     @DField(name = "flag")
73     private String flag;
74     private Long delay;
75     private BeanDataType currentType;
76     private boolean isSelected = false; // Whether to be selected
77     @DField(name = "args")
78     private String args;
79 
80     /**
81      * isSelected
82      *
83      * @return boolean isSelected
84      */
isSelected()85     public boolean isSelected() {
86         return isSelected;
87     }
88 
89     /**
90      * setSelected
91      *
92      * @param selected isSelected
93      */
setSelected(boolean selected)94     public void setSelected(boolean selected) {
95         isSelected = selected;
96     }
97 
98     /**
99      * getSpanId
100      *
101      * @return spanId spanId
102      */
getSpanId()103     public Integer getSpanId() {
104         return spanId;
105     }
106 
107     /**
108      * setSpanId
109      *
110      * @param spanId spanId
111      */
setSpanId(Integer spanId)112     public void setSpanId(Integer spanId) {
113         this.spanId = spanId;
114     }
115 
116     /**
117      * getParentSpanId
118      *
119      * @return parentSpanId parentSpanId
120      */
getParentSpanId()121     public Integer getParentSpanId() {
122         return parentSpanId;
123     }
124 
125     /**
126      * getParentSpanId
127      *
128      * @param parentSpanId parentSpanId
129      */
setParentSpanId(Integer parentSpanId)130     public void setParentSpanId(Integer parentSpanId) {
131         this.parentSpanId = parentSpanId;
132     }
133 
134     /**
135      * getFlag
136      *
137      * @return flag flag
138      */
getFlag()139     public String getFlag() {
140         return flag;
141     }
142 
143     /**
144      * setFlag
145      *
146      * @param flag flag
147      */
setFlag(String flag)148     public void setFlag(String flag) {
149         this.flag = flag;
150     }
151 
152     /**
153      * getArgs
154      *
155      * @return args args
156      */
getArgs()157     public String getArgs() {
158         return args;
159     }
160 
161     /**
162      * setArgs
163      *
164      * @param args args
165      */
setArgs(String args)166     public void setArgs(String args) {
167         this.args = args;
168     }
169 
170     /**
171      * getId
172      *
173      * @return id id
174      */
getId()175     public Integer getId() {
176         return id;
177     }
178 
179     /**
180      * setId
181      *
182      * @param id id
183      */
setId(Integer id)184     public void setId(Integer id) {
185         this.id = id;
186     }
187 
188     /**
189      * getParentId
190      *
191      * @return parentId parentId
192      */
getParentId()193     public Integer getParentId() {
194         return parentId;
195     }
196 
197     /**
198      * setParentId
199      *
200      * @param parentId parentId
201      */
setParentId(Integer parentId)202     public void setParentId(Integer parentId) {
203         this.parentId = parentId;
204     }
205 
206     /**
207      * getIsMainThread
208      *
209      * @return isMainThread isMainThread
210      */
getIsMainThread()211     public Integer getIsMainThread() {
212         return isMainThread;
213     }
214 
215     /**
216      * setIsMainThread
217      *
218      * @param isMainThread isMainThread
219      */
setIsMainThread(Integer isMainThread)220     public void setIsMainThread(Integer isMainThread) {
221         this.isMainThread = isMainThread;
222     }
223 
224     /**
225      * getTrackId
226      *
227      * @return trackId trackId
228      */
getTrackId()229     public Integer getTrackId() {
230         return trackId;
231     }
232 
233     /**
234      * setTrackId
235      *
236      * @param trackId trackId
237      */
setTrackId(Integer trackId)238     public void setTrackId(Integer trackId) {
239         this.trackId = trackId;
240     }
241 
242     /**
243      * getFuncName
244      *
245      * @return funcName funcName
246      */
getFuncName()247     public String getFuncName() {
248         return funcName;
249     }
250 
251     /**
252      * setFuncName
253      *
254      * @param funcName funcName
255      */
setFuncName(String funcName)256     public void setFuncName(String funcName) {
257         this.funcName = funcName;
258     }
259 
260     /**
261      * getTid
262      *
263      * @return tid tid
264      */
getTid()265     public Integer getTid() {
266         return tid;
267     }
268 
269     /**
270      * setTid
271      *
272      * @param tid tid
273      */
setTid(Integer tid)274     public void setTid(Integer tid) {
275         this.tid = tid;
276     }
277 
278     /**
279      * getDepth
280      *
281      * @return depth depth
282      */
getDepth()283     public Integer getDepth() {
284         return depth;
285     }
286 
287     /**
288      * setDepth
289      *
290      * @param depth depth
291      */
setDepth(Integer depth)292     public void setDepth(Integer depth) {
293         this.depth = depth;
294     }
295 
296     /**
297      * getThreadName
298      *
299      * @return threadName threadName
300      */
getThreadName()301     public String getThreadName() {
302         return threadName;
303     }
304 
305     /**
306      * setThreadName
307      *
308      * @param threadName threadName
309      */
setThreadName(String threadName)310     public void setThreadName(String threadName) {
311         this.threadName = threadName;
312     }
313 
314     /**
315      * getStartTs
316      *
317      * @return startTs startTs
318      */
getStartTs()319     public long getStartTs() {
320         return startTs;
321     }
322 
323     /**
324      * setStartTs
325      *
326      * @param startTs startTs
327      */
setStartTs(long startTs)328     public void setStartTs(long startTs) {
329         this.startTs = startTs;
330     }
331 
332     /**
333      * getDur
334      *
335      * @return dur dur
336      */
getDur()337     public Long getDur() {
338         return dur;
339     }
340 
341     /**
342      * setDur
343      *
344      * @param dur dur
345      */
setDur(Long dur)346     public void setDur(Long dur) {
347         this.dur = dur;
348     }
349 
350     /**
351      * getChainId
352      *
353      * @return chainId chainId
354      */
getChainId()355     public String getChainId() {
356         return chainId;
357     }
358 
359     /**
360      * setChainId
361      *
362      * @param chainId chainId
363      */
setChainId(String chainId)364     public void setChainId(String chainId) {
365         this.chainId = chainId;
366     }
367 
368     /**
369      * getCurrentType
370      *
371      * @return currentType currentType
372      */
getCurrentType()373     public BeanDataType getCurrentType() {
374         return currentType;
375     }
376 
377     /**
378      * setCurrentType
379      *
380      * @param currentType currentType
381      */
setCurrentType(BeanDataType currentType)382     public void setCurrentType(BeanDataType currentType) {
383         this.currentType = currentType;
384     }
385 
386     /**
387      * getDelay
388      *
389      * @return delay delay
390      */
getDelay()391     public Long getDelay() {
392         return delay;
393     }
394 
395     /**
396      * setDelay
397      *
398      * @param delay delay
399      */
setDelay(Long delay)400     public void setDelay(Long delay) {
401         this.delay = delay;
402     }
403 
404     /**
405      * getEndTs
406      *
407      * @return startTs + dur
408      */
getEndTs()409     public long getEndTs() {
410         if (startTs != 0 && dur != 0) {
411             return startTs + dur;
412         }
413         return 0;
414     }
415 
416     @Override
draw(Graphics2D graphics)417     public void draw(Graphics2D graphics) {
418         if (depth == -1) {
419             return;
420         }
421         if (isMouseIn) {
422             DistributedCommon.setAlpha(graphics, 0.7F);
423         } else {
424             DistributedCommon.setAlpha(graphics, 1.0F);
425         }
426         if (isSelected) {
427             graphics.setColor(Color.black);
428             graphics.fillRect(Utils.getX(rect), Utils.getY(rect), rect.width, rect.height);
429             graphics.setColor(ColorUtils.FUNC_COLOR[depth % ColorUtils.FUNC_COLOR.length]);
430             graphics.fillRect(Utils.getX(rect) + 2, Utils.getY(rect) + 2, rect.width - 4, rect.height - 4);
431             graphics.setColor(Color.white);
432             Rectangle rectangle = new Rectangle();
433             rectangle.setRect(rect.getX() + 2, rect.getY() + 2, rect.getWidth() - 4, rect.getHeight() - 4);
434             DistributedCommon.drawStringCenter(graphics, funcName, rectangle);
435         } else {
436             graphics.setColor(ColorUtils.FUNC_COLOR[depth % ColorUtils.FUNC_COLOR.length]);
437             graphics.fillRect(Utils.getX(rect), Utils.getY(rect), rect.width, rect.height);
438             graphics.setColor(Color.white);
439             DistributedCommon.drawStringCenter(graphics, funcName, rect);
440         }
441         DistributedCommon.setAlpha(graphics, 1.0F);
442     }
443 
444     @Override
getStringList(String time)445     public List<String> getStringList(String time) {
446         return Arrays.asList(time, "Start:" + TimeUtils.getTimeWithUnit(getStartTs()),
447             "End:" + TimeUtils.getTimeWithUnit(getEndTs()), "Dur:" + TimeUtils.getTimeWithUnit(getDur()),
448             "" + getFuncName());
449     }
450 
451     @Override
onClick(MouseEvent event)452     public void onClick(MouseEvent event) {
453         super.onClick(event);
454         if (Objects.nonNull(currentSelectedFunc)) {
455             currentSelectedFunc.setSelected(false);
456         }
457         this.setSelected(true);
458         currentSelectedFunc = this;
459         DistributedTracePanel.root.repaint();
460         EventDispatcher.dispatcherClickListener(this);
461     }
462 
463     /**
464      * enum BeanDataType A or B
465      */
466     public enum BeanDataType {
467         TYPE_A, TYPE_B
468     }
469 }
470