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