├── .gitignore ├── Makefile ├── README.md ├── graphdata.c ├── handler.c ├── legend.xml ├── parse.c ├── resdata.S ├── style.css ├── testdata ├── contents.txt ├── timeline-1.log ├── timeline-2.log ├── timeline-3.log ├── timeline-egl-move-output.log ├── timeline-presentation-f.log ├── timeline-presentation-i.log └── timeline-presentation-p.log ├── wesgr.c └── wesgr.h /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | *.swp 3 | /*.svg 4 | /wesgr 5 | /config.mk 6 | 7 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | CC ?= gcc 2 | V ?= 0 3 | 4 | -include config.mk 5 | 6 | CFLAGS+=-Wextra -Wall -Wno-unused-parameter \ 7 | -Wstrict-prototypes -Wmissing-prototypes -O0 -g 8 | CPPFLAGS+=$(DEP_CFLAGS) -D_GNU_SOURCE 9 | LDLIBS+=$(DEP_LIBS) -lm 10 | 11 | HEADERS := $(wildcard *.h) 12 | OBJS := wesgr.o parse.o graphdata.o handler.o resdata.o 13 | EXE := wesgr 14 | GENERATED := config.mk 15 | 16 | all: $(EXE) 17 | demo: tgraph1.svg tgraph2.svg sample3-overview.svg sample3-detail.svg 18 | 19 | .PHONY: clean demo 20 | 21 | clean: 22 | rm -f *.o $(EXE) $(GENERATED) 23 | 24 | $(EXE): $(OBJS) 25 | $(M_V_LINK)$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@ 26 | 27 | $(OBJS): $(HEADERS) config.mk 28 | 29 | resdata.o: legend.xml style.css 30 | 31 | PKG_DEPS := json-c >= 0.11 32 | config.mk: Makefile 33 | $(M_V_GEN)\ 34 | echo "DEP_CFLAGS=`pkg-config --cflags '$(PKG_DEPS)'`" > $@ && \ 35 | echo "DEP_LIBS=`pkg-config --libs '$(PKG_DEPS)'`" >> $@ 36 | 37 | tgraph1.svg: $(EXE) style.css 38 | ./$(EXE) -i testdata/timeline-1.log -o $@ -a 413 -b 620 39 | 40 | tgraph2.svg: $(EXE) style.css 41 | ./$(EXE) -i testdata/timeline-2.log -o $@ 42 | 43 | sample3-overview.svg: $(EXE) style.css 44 | ./$(EXE) -i testdata/timeline-3.log -o $@ 45 | 46 | sample3-detail.svg: $(EXE) style.css 47 | ./$(EXE) -i testdata/timeline-3.log -o $@ -a 26000 -b 26100 48 | 49 | %.o: %.c 50 | $(M_V_CC)$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< 51 | 52 | %.o: %.S 53 | $(M_V_AS)$(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_MACH) -c -o $@ $< 54 | 55 | .SUFFIXES: 56 | 57 | m_v_cc_0 = @echo " CC " $@; 58 | M_V_CC = $(m_v_cc_$(V)) 59 | m_v_as_0 = @echo " CCAS " $@; 60 | M_V_AS = $(m_v_as_$(V)) 61 | m_v_link_0 = @echo " LINK " $@; 62 | M_V_LINK = $(m_v_link_$(V)) 63 | m_v_gen_0 = @echo " GEN " $@; 64 | M_V_GEN = $(m_v_gen_$(V)) 65 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Wesgr 2 | 3 | Wesgr is a [Weston](http://wayland.freedesktop.org/) 4 | JSON timeline data interpreter and grapher. 5 | Its intention is to produce an SVG image with annotations, 6 | describing the actions related to Weston's repaint loop. 7 | 8 | JSON timeline feature was merged and released first in Weston 1.6.91 9 | (Weston 1.7 alpha). 10 | 11 | ## Building 12 | 13 | No autotools yet, so just do `make`. There is no target 14 | for installing. 15 | 16 | ## Running 17 | 18 | ./wesgr -i testdata/timeline-1.log -o graph.svg 19 | 20 | It creates `graph.svg`. 21 | 22 | ## Example output 23 | 24 | This is a recording from Weston's DRM backend with two outputs. 25 | You can find the input data as `testdata/timeline-3.log`, and you can 26 | generate these with `make demo`. 27 | 28 | An overview of the whole recording, as PNG because the SVG is 960 kB: 29 | ![Example output](http://ppaalanen.github.io/wesgr/examples/sample3-overview.png 30 | "The whole recording") 31 | 32 | A sub-range of the recording: 33 | ![Example output](http://ppaalanen.github.io/wesgr/examples/sample3-detail.svg 34 | "A subset of the recording") 35 | -------------------------------------------------------------------------------- /graphdata.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2014 Pekka Paalanen 3 | * 4 | * Permission to use, copy, modify, distribute, and sell this software and 5 | * its documentation for any purpose is hereby granted without fee, provided 6 | * that the above copyright notice appear in all copies and that both that 7 | * copyright notice and this permission notice appear in supporting 8 | * documentation, and that the name of the copyright holders not be used in 9 | * advertising or publicity pertaining to distribution of the software 10 | * without specific, written prior permission. The copyright holders make 11 | * no representations about the suitability of this software for any 12 | * purpose. It is provided "as is" without express or implied warranty. 13 | * 14 | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS 15 | * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 16 | * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY 17 | * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER 18 | * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF 19 | * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 20 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 | */ 22 | 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | 30 | #include "wesgr.h" 31 | 32 | struct svg_context { 33 | FILE *fp; 34 | struct timespec begin; 35 | double width; 36 | double height; 37 | double nsec_to_x; 38 | double offset_x; 39 | 40 | struct { 41 | uint64_t a, b; 42 | } time_range; 43 | }; 44 | 45 | int 46 | graph_data_init(struct graph_data *gdata) 47 | { 48 | memset(gdata, 0, sizeof *gdata); 49 | timespec_invalidate(&gdata->begin); 50 | 51 | return 0; 52 | } 53 | 54 | static void 55 | update_destroy(struct update *update) 56 | { 57 | free(update); 58 | } 59 | 60 | static void 61 | update_graph_destroy(struct update_graph *update_gr) 62 | { 63 | struct update *update, *tmp; 64 | 65 | assert(update_gr->need_vblank == NULL); 66 | 67 | for (update = update_gr->updates; update; update = tmp) { 68 | tmp = update->next; 69 | update_destroy(update); 70 | } 71 | 72 | free(update_gr->label); 73 | free(update_gr); 74 | } 75 | 76 | static void 77 | update_graph_list_destroy(struct update_graph *update_gr) 78 | { 79 | struct update_graph *tmp; 80 | 81 | for (; update_gr; update_gr = tmp) { 82 | tmp = update_gr->next; 83 | update_graph_destroy(update_gr); 84 | } 85 | } 86 | 87 | static void 88 | activity_destroy(struct activity *act) 89 | { 90 | free(act); 91 | } 92 | 93 | static void 94 | activity_set_release(struct activity_set *acts) 95 | { 96 | struct activity *act, *tmp; 97 | 98 | for (act = acts->act; act; act = tmp) { 99 | tmp = act->next; 100 | activity_destroy(act); 101 | } 102 | } 103 | 104 | static void 105 | vblank_destroy(struct vblank *vbl) 106 | { 107 | free(vbl); 108 | } 109 | 110 | static void 111 | vblank_set_release(struct vblank_set *vblanks) 112 | { 113 | struct vblank *vbl, *tmp; 114 | 115 | for (vbl = vblanks->vbl; vbl; vbl = tmp) { 116 | tmp = vbl->next; 117 | vblank_destroy(vbl); 118 | } 119 | } 120 | 121 | static void 122 | transition_destroy(struct transition *tr) 123 | { 124 | free(tr); 125 | } 126 | 127 | static void 128 | transition_set_release(struct transition_set *tset) 129 | { 130 | struct transition *tr, *tmp; 131 | 132 | for (tr = tset->trans; tr; tr = tmp) { 133 | tmp = tr->next; 134 | transition_destroy(tr); 135 | } 136 | } 137 | 138 | static void 139 | line_block_destroy(struct line_block *bl) 140 | { 141 | free(bl->desc); 142 | free(bl); 143 | } 144 | 145 | static void 146 | line_graph_release(struct line_graph *linegr) 147 | { 148 | struct line_block *lb, *tmp; 149 | 150 | for (lb = linegr->block; lb; lb = tmp) { 151 | tmp = lb->next; 152 | line_block_destroy(lb); 153 | } 154 | } 155 | 156 | static void 157 | output_graph_destroy(struct output_graph *og) 158 | { 159 | line_graph_release(&og->delay_line); 160 | line_graph_release(&og->submit_line); 161 | line_graph_release(&og->gpu_line); 162 | line_graph_release(&og->renderer_gpu_line); 163 | transition_set_release(&og->begins); 164 | transition_set_release(&og->posts); 165 | vblank_set_release(&og->vblanks); 166 | activity_set_release(&og->not_looping); 167 | update_graph_list_destroy(og->updates); 168 | free(og); 169 | } 170 | 171 | void 172 | graph_data_release(struct graph_data *gdata) 173 | { 174 | struct output_graph *og, *tmp; 175 | 176 | for (og = gdata->output; og; og = tmp) { 177 | tmp = og->next; 178 | output_graph_destroy(og); 179 | } 180 | } 181 | 182 | void 183 | graph_data_time(struct graph_data *gdata, const struct timespec *ts) 184 | { 185 | if (!timespec_is_valid(&gdata->begin)) 186 | gdata->begin = *ts; 187 | gdata->end = *ts; 188 | } 189 | 190 | #define NSEC_PER_SEC 1000000000 191 | 192 | static int 193 | timespec_cmp(const struct timespec *a, const struct timespec *b) 194 | { 195 | assert(a->tv_nsec >= 0 && a->tv_nsec < NSEC_PER_SEC); 196 | assert(b->tv_nsec >= 0 && b->tv_nsec < NSEC_PER_SEC); 197 | 198 | if (a->tv_sec < b->tv_sec) 199 | return -1; 200 | 201 | if (a->tv_sec > b->tv_sec) 202 | return 1; 203 | 204 | if (a->tv_nsec < b->tv_nsec) 205 | return -1; 206 | 207 | if (a->tv_nsec > b->tv_nsec) 208 | return 1; 209 | 210 | return 0; 211 | } 212 | 213 | static void 214 | timespec_sub(struct timespec *r, 215 | const struct timespec *a, const struct timespec *b) 216 | { 217 | r->tv_sec = a->tv_sec - b->tv_sec; 218 | r->tv_nsec = a->tv_nsec - b->tv_nsec; 219 | if (r->tv_nsec < 0) { 220 | r->tv_sec--; 221 | r->tv_nsec += NSEC_PER_SEC; 222 | } 223 | } 224 | 225 | static uint64_t 226 | timespec_sub_to_nsec(const struct timespec *a, const struct timespec *b) 227 | { 228 | struct timespec d; 229 | uint64_t sec, nsec; 230 | 231 | if (!timespec_is_valid(a)) 232 | return UINT64_MAX; 233 | 234 | if (timespec_cmp(a, b) < 0) 235 | return 0; 236 | 237 | timespec_sub(&d, a, b); 238 | 239 | sec = d.tv_sec; 240 | nsec = d.tv_nsec; 241 | 242 | nsec = sec * NSEC_PER_SEC + nsec; 243 | 244 | return nsec; 245 | } 246 | 247 | static double 248 | svg_get_x_from_nsec(struct svg_context *ctx, uint64_t nsec) 249 | { 250 | if (nsec < ctx->time_range.a) 251 | return ctx->offset_x; 252 | 253 | if (nsec > ctx->time_range.b) 254 | nsec = ctx->time_range.b; 255 | 256 | return ctx->offset_x + ctx->nsec_to_x * (nsec - ctx->time_range.a); 257 | } 258 | 259 | static double 260 | svg_get_x(struct svg_context *ctx, const struct timespec *ts) 261 | { 262 | return svg_get_x_from_nsec(ctx, timespec_sub_to_nsec(ts, &ctx->begin)); 263 | } 264 | 265 | static int 266 | is_in_range(struct svg_context *ctx, const struct timespec *a, 267 | const struct timespec *b) 268 | { 269 | uint64_t begin, end; 270 | 271 | begin = timespec_sub_to_nsec(a, &ctx->begin); 272 | 273 | if (!timespec_is_valid(b)) 274 | return begin <= ctx->time_range.b; 275 | 276 | assert(timespec_cmp(a, b) <= 0); 277 | 278 | if (timespec_cmp(b, &ctx->begin) < 0) 279 | return 0; 280 | 281 | end = timespec_sub_to_nsec(b, &ctx->begin); 282 | 283 | return !(end < ctx->time_range.a || begin > ctx->time_range.b); 284 | } 285 | 286 | static int 287 | is_point_in_range(struct svg_context *ctx, const struct timespec *a) 288 | { 289 | uint64_t pt; 290 | 291 | if (!timespec_is_valid(a)) 292 | return 0; 293 | 294 | pt = timespec_sub_to_nsec(a, &ctx->begin); 295 | 296 | return !(pt < ctx->time_range.a || pt > ctx->time_range.b); 297 | } 298 | 299 | static int 300 | line_block_to_svg(struct line_block *lb, struct svg_context *ctx, double y) 301 | { 302 | double a, b; 303 | 304 | if (!is_in_range(ctx, &lb->begin, &lb->end)) 305 | return 0; 306 | 307 | a = svg_get_x(ctx, &lb->begin); 308 | b = svg_get_x(ctx, &lb->end); 309 | fprintf(ctx->fp, "\n", a, y, b); 310 | 311 | return 0; 312 | } 313 | 314 | static int 315 | line_graph_to_svg(struct line_graph *linegr, struct svg_context *ctx) 316 | { 317 | struct line_block *lb; 318 | 319 | fprintf(ctx->fp, "\n", linegr->style); 320 | fprintf(ctx->fp, 321 | "%s\n", 324 | linegr->y, linegr->label); 325 | 326 | for (lb = linegr->block; lb; lb = lb->next) 327 | if (line_block_to_svg(lb, ctx, linegr->y) < 0) 328 | return ERROR; 329 | 330 | fprintf(ctx->fp, "\n"); 331 | 332 | return 0; 333 | } 334 | 335 | static int 336 | transition_to_svg(struct transition *tr, struct svg_context *ctx, 337 | double y1, double y2) 338 | { 339 | double t; 340 | 341 | if (!is_in_range(ctx, &tr->ts, &tr->ts)) 342 | return 0; 343 | 344 | t = svg_get_x(ctx, &tr->ts); 345 | fprintf(ctx->fp, "" 346 | "\n", 347 | t, y1, y2, 348 | t, (y1 + y2) * 0.5); 349 | 350 | return 0; 351 | } 352 | 353 | static int 354 | transition_set_to_svg(struct transition_set *tset, struct svg_context *ctx, 355 | double y1, double y2) 356 | { 357 | struct transition *tr; 358 | 359 | fprintf(ctx->fp, "\n", tset->style); 360 | 361 | for (tr = tset->trans; tr; tr = tr->next) 362 | if (transition_to_svg(tr, ctx, y1, y2) < 0) 363 | return ERROR; 364 | 365 | fprintf(ctx->fp, "\n"); 366 | 367 | return 0; 368 | } 369 | 370 | static int 371 | vblank_to_svg(struct vblank *vbl, struct svg_context *ctx, 372 | double y1, double y2) 373 | { 374 | double t; 375 | 376 | if (!is_in_range(ctx, &vbl->ts, &vbl->ts)) 377 | return 0; 378 | 379 | t = svg_get_x(ctx, &vbl->ts); 380 | fprintf(ctx->fp, "" 381 | "\n", 382 | t, y1, y2, t, y1); 383 | 384 | return 0; 385 | } 386 | 387 | static int 388 | vblank_set_to_svg(struct vblank_set *vblanks, struct svg_context *ctx, 389 | double y1, double y2) 390 | { 391 | struct vblank *vbl; 392 | 393 | fprintf(ctx->fp, "\n"); 394 | 395 | for (vbl = vblanks->vbl; vbl; vbl = vbl->next) 396 | if (vblank_to_svg(vbl, ctx, y1, y2) < 0) 397 | return ERROR; 398 | 399 | fprintf(ctx->fp, "\n"); 400 | 401 | return 0; 402 | } 403 | 404 | static int 405 | activity_to_svg(struct activity *act, struct svg_context *ctx, 406 | double y1, double y2) 407 | { 408 | double a, b; 409 | 410 | if (!is_in_range(ctx, &act->begin, &act->end)) 411 | return 0; 412 | 413 | a = svg_get_x(ctx, &act->begin); 414 | b = svg_get_x(ctx, &act->end); 415 | fprintf(ctx->fp, 416 | "\n", 417 | a, y1, b, y2, a); 418 | 419 | return 0; 420 | } 421 | 422 | static int 423 | activity_set_to_svg(struct activity_set *acts, struct svg_context *ctx, 424 | double y1, double y2) 425 | { 426 | struct activity *act; 427 | 428 | fprintf(ctx->fp, "\n"); 429 | 430 | for (act = acts->act; act; act = act->next) 431 | if (activity_to_svg(act, ctx, y1, y2) < 0) 432 | return ERROR; 433 | 434 | fprintf(ctx->fp, "\n"); 435 | 436 | return 0; 437 | } 438 | 439 | static int 440 | update_to_svg(struct update *up, struct svg_context *ctx, double y, 441 | struct timespec **last_end) 442 | { 443 | double a, b; 444 | struct timespec *begin; 445 | 446 | if (timespec_is_valid(&up->damage)) 447 | begin = &up->damage; 448 | else if (timespec_is_valid(&up->flush)) 449 | begin = &up->flush; 450 | else if (timespec_is_valid(&up->vblank)) 451 | begin = &up->vblank; 452 | else 453 | return 0; 454 | 455 | if (!is_in_range(ctx, begin, &up->vblank)) 456 | return 0; 457 | 458 | /* XXX: we parse the list from end to begin, this is wrong way */ 459 | if (*last_end && (!timespec_is_valid(*last_end) || 460 | timespec_cmp(*last_end, begin) >= 0)) { 461 | y += 5.0; 462 | *last_end = NULL; 463 | } else { 464 | y -= 5.0; 465 | *last_end = &up->vblank; 466 | } 467 | 468 | if (is_point_in_range(ctx, &up->damage)) { 469 | double x = svg_get_x(ctx, &up->damage); 470 | 471 | fprintf(ctx->fp, 472 | "", 473 | x, y - 4.0, 8.0, x + 5.0, y); 474 | } 475 | 476 | if (is_point_in_range(ctx, &up->flush)) { 477 | double x = svg_get_x(ctx, &up->flush); 478 | 479 | fprintf(ctx->fp, 480 | "", x, y); 481 | } 482 | 483 | a = svg_get_x(ctx, begin); 484 | b = svg_get_x(ctx, &up->vblank); 485 | fprintf(ctx->fp, "\n", a, y, b); 486 | 487 | return 0; 488 | } 489 | 490 | static int 491 | update_graph_to_svg(struct update_graph *update_gr, struct svg_context *ctx) 492 | { 493 | struct update *upd; 494 | struct timespec *last_end = NULL; 495 | 496 | fprintf(ctx->fp, "\n", update_gr->style); 497 | fprintf(ctx->fp, 498 | "%s\n", 501 | update_gr->y, update_gr->label); 502 | 503 | for (upd = update_gr->updates; upd; upd = upd->next) 504 | if (update_to_svg(upd, ctx, update_gr->y, &last_end) < 0) 505 | return ERROR; 506 | 507 | fprintf(ctx->fp, "\n"); 508 | 509 | return 0; 510 | } 511 | 512 | static int 513 | output_graph_to_svg(struct output_graph *og, struct svg_context *ctx) 514 | { 515 | struct update_graph *upg; 516 | 517 | fprintf(ctx->fp, 518 | "Output %s\n", 521 | og->title_y, og->info->name); 522 | 523 | if (activity_set_to_svg(&og->not_looping, ctx, og->y1, og->y2) < 0) 524 | return ERROR; 525 | 526 | if (vblank_set_to_svg(&og->vblanks, ctx, og->y1, og->y2) < 0) 527 | return ERROR; 528 | 529 | if (line_graph_to_svg(&og->delay_line, ctx) < 0) 530 | return ERROR; 531 | 532 | if (line_graph_to_svg(&og->submit_line, ctx) < 0) 533 | return ERROR; 534 | 535 | if (line_graph_to_svg(&og->gpu_line, ctx) < 0) 536 | return ERROR; 537 | 538 | if (line_graph_to_svg(&og->renderer_gpu_line, ctx) < 0) 539 | return ERROR; 540 | 541 | if (transition_set_to_svg(&og->begins, ctx, 542 | og->delay_line.y, og->submit_line.y) < 0) 543 | return ERROR; 544 | 545 | if (transition_set_to_svg(&og->posts, ctx, 546 | og->submit_line.y, og->gpu_line.y) < 0) 547 | return ERROR; 548 | 549 | for (upg = og->updates; upg; upg = upg->next) 550 | if (update_graph_to_svg(upg, ctx) < 0) 551 | return ERROR; 552 | 553 | return 0; 554 | } 555 | 556 | static uint64_t 557 | round_up(uint64_t nsec, uint64_t f) 558 | { 559 | return (nsec + f - 1) / f * f; 560 | } 561 | 562 | static uint64_t 563 | compute_big_skip_ns(struct svg_context *ctx) 564 | { 565 | static const uint64_t mtick_levels[] = { 1, 5 }; 566 | uint64_t scale; 567 | uint64_t skip_ms; 568 | unsigned i; 569 | 570 | skip_ms = round(50.0 / ctx->nsec_to_x * 1e-6); 571 | 572 | for (scale = 1; scale < 100001; scale *= 10) { 573 | for (i = 0; i < ARRAY_LENGTH(mtick_levels); i++) { 574 | uint64_t skip = mtick_levels[i] * scale; 575 | 576 | if (skip_ms < skip) 577 | return skip * 1000000; 578 | } 579 | } 580 | 581 | return NSEC_PER_SEC; 582 | } 583 | 584 | static void 585 | time_scale_to_svg(struct svg_context *ctx, double y) 586 | { 587 | uint64_t nsec; 588 | uint64_t big_skip; 589 | uint64_t lil_skip; 590 | double left, right; 591 | const double big_tick_size = 15.0; 592 | const double lil_tick_size = 10.0; 593 | const double tick_label_up = 5.0; 594 | 595 | big_skip = compute_big_skip_ns(ctx); 596 | lil_skip = big_skip / 5; 597 | 598 | fprintf(ctx->fp, "time_range.a, big_skip); 600 | nsec <= ctx->time_range.b; nsec += big_skip) { 601 | fprintf(ctx->fp, "M %.2f %.2f V %.2f ", 602 | svg_get_x_from_nsec(ctx, nsec), y, y + big_tick_size); 603 | } 604 | fprintf(ctx->fp, "\" class=\"major_tick\" />\n"); 605 | 606 | for (nsec = round_up(ctx->time_range.a, big_skip); 607 | nsec <= ctx->time_range.b; nsec += big_skip) { 608 | fprintf(ctx->fp, "%" PRIu64 "\n", 611 | svg_get_x_from_nsec(ctx, nsec), 612 | y - tick_label_up, nsec / 1000000); 613 | } 614 | 615 | fprintf(ctx->fp, "time_range.a, lil_skip); 617 | nsec <= ctx->time_range.b; nsec += lil_skip) { 618 | if (nsec % big_skip == 0) 619 | continue; 620 | 621 | fprintf(ctx->fp, "M %.2f %.2f V %.2f ", 622 | svg_get_x_from_nsec(ctx, nsec), y, y + lil_tick_size); 623 | } 624 | fprintf(ctx->fp, "\" class=\"minor_tick\" />\n"); 625 | 626 | left = svg_get_x_from_nsec(ctx, ctx->time_range.a); 627 | right = svg_get_x_from_nsec(ctx, ctx->time_range.b); 628 | fprintf(ctx->fp, "\n", 629 | left, y, right); 630 | 631 | fprintf(ctx->fp, "time (ms)\n", 634 | (left + right) / 2.0, y - tick_label_up); 635 | } 636 | 637 | static int 638 | output_res(struct svg_context *ctx, char *data, size_t len) 639 | { 640 | size_t pos = 0; 641 | size_t n; 642 | 643 | while (pos < len) { 644 | n = fwrite(data + pos, 1, len - pos, ctx->fp); 645 | if (n < 1) 646 | return ERROR; 647 | pos += n; 648 | } 649 | 650 | return 0; 651 | } 652 | 653 | #define OUTPUT_RES(ctx, name) \ 654 | ({ \ 655 | extern char RES_##name##_begin; \ 656 | extern int RES_##name##_len; \ 657 | output_res((ctx), &RES_##name##_begin, RES_##name##_len); \ 658 | }) 659 | 660 | static int 661 | headers_to_svg(struct svg_context *ctx) 662 | { 663 | 664 | fprintf(ctx->fp, 665 | "\n" 668 | "\n" 669 | "\n" 677 | "\n" 678 | "\n" 679 | "\n"); 680 | 681 | return 0; 682 | } 683 | 684 | static void 685 | footers_to_svg(struct svg_context *ctx) 686 | { 687 | fprintf(ctx->fp, 688 | "\n" 689 | "\n"); 690 | } 691 | 692 | static int 693 | legend_to_svg(struct svg_context *ctx, double y) 694 | { 695 | fprintf(ctx->fp, "\n", 696 | svg_get_x_from_nsec(ctx, 0), y); 697 | 698 | if (OUTPUT_RES(ctx, legend) < 0) 699 | return ERROR; 700 | 701 | fprintf(ctx->fp, "\n"); 702 | 703 | return 0; 704 | } 705 | 706 | static void 707 | svg_context_init(struct svg_context *ctx, struct graph_data *gdata, 708 | int from_ms, int to_ms, double width, double height) 709 | { 710 | const double margin = 5.0; 711 | const double left_pad = 250.0; 712 | const double right_pad = 20.0; 713 | 714 | if (from_ms < 0) 715 | ctx->time_range.a = 0; 716 | else 717 | ctx->time_range.a = (uint64_t)from_ms * 1000000; 718 | 719 | if (to_ms < 0) 720 | ctx->time_range.b = timespec_sub_to_nsec(&gdata->end, 721 | &gdata->begin); 722 | else 723 | ctx->time_range.b = (uint64_t)to_ms * 1000000; 724 | 725 | ctx->width = width; 726 | ctx->height = height; 727 | ctx->begin = gdata->begin; 728 | ctx->offset_x = margin + left_pad; 729 | 730 | ctx->nsec_to_x = (ctx->width - 2 * margin - left_pad - right_pad) / 731 | (ctx->time_range.b - ctx->time_range.a); 732 | } 733 | 734 | static double 735 | update_graph_set_position(struct update_graph *update_gr, double y) 736 | { 737 | update_gr->y = y + 13.0; 738 | 739 | return y + 26.0; 740 | } 741 | 742 | static void 743 | graph_data_init_draw(struct graph_data *gdata, double *width, double *height) 744 | { 745 | struct output_graph *og; 746 | struct update_graph *upg; 747 | const double line_step = 20.0; 748 | const double output_margin = 30.0; 749 | double y = 50.5; 750 | 751 | gdata->time_axis_y = y; 752 | y += 30.0; 753 | 754 | for (og = gdata->output; og; og = og->next) { 755 | og->y1 = y - 10.0; 756 | 757 | og->title_y = y; 758 | y += line_step; 759 | 760 | og->delay_line.y = y; 761 | y += line_step; 762 | 763 | og->submit_line.y = y; 764 | y += line_step; 765 | 766 | og->gpu_line.y = y; 767 | y += line_step; 768 | 769 | og->renderer_gpu_line.y = y; 770 | y += line_step * 1.5; 771 | 772 | for (upg = og->updates; upg; upg = upg->next) 773 | y = update_graph_set_position(upg, y); 774 | 775 | og->y2 = y + 10.0; 776 | 777 | y += output_margin; 778 | } 779 | 780 | gdata->legend_y = y; 781 | y += 40.0; 782 | 783 | *width = 1300; 784 | *height = y + line_step; 785 | } 786 | 787 | int 788 | graph_data_to_svg(struct graph_data *gdata, int from_ms, int to_ms, 789 | const char *filename) 790 | { 791 | struct output_graph *og; 792 | struct svg_context ctx; 793 | double w, h; 794 | 795 | graph_data_init_draw(gdata, &w, &h); 796 | svg_context_init(&ctx, gdata, from_ms, to_ms, w, h); 797 | 798 | ctx.fp = fopen(filename, "w"); 799 | if (!ctx.fp) 800 | return ERROR; 801 | 802 | if (headers_to_svg(&ctx) < 0) 803 | return ERROR; 804 | 805 | time_scale_to_svg(&ctx, gdata->time_axis_y); 806 | 807 | for (og = gdata->output; og; og = og->next) 808 | if (output_graph_to_svg(og, &ctx) < 0) 809 | return ERROR; 810 | 811 | if (legend_to_svg(&ctx, gdata->legend_y) < 0) 812 | return ERROR; 813 | 814 | footers_to_svg(&ctx); 815 | 816 | if (fclose(ctx.fp) != 0) 817 | return ERROR; 818 | 819 | return 0; 820 | } 821 | 822 | -------------------------------------------------------------------------------- /handler.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2014 Pekka Paalanen 3 | * 4 | * Permission to use, copy, modify, distribute, and sell this software and 5 | * its documentation for any purpose is hereby granted without fee, provided 6 | * that the above copyright notice appear in all copies and that both that 7 | * copyright notice and this permission notice appear in supporting 8 | * documentation, and that the name of the copyright holders not be used in 9 | * advertising or publicity pertaining to distribution of the software 10 | * without specific, written prior permission. The copyright holders make 11 | * no representations about the suitability of this software for any 12 | * purpose. It is provided "as is" without express or implied warranty. 13 | * 14 | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS 15 | * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 16 | * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY 17 | * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER 18 | * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF 19 | * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 20 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 | */ 22 | 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | 31 | #include 32 | 33 | #include "wesgr.h" 34 | 35 | static struct activity * 36 | activity_create(struct activity_set *acts, 37 | const struct timespec *begin, const struct timespec *end) 38 | { 39 | struct activity *act; 40 | 41 | act = calloc(1, sizeof *act); 42 | if (!act) 43 | return ERROR_NULL; 44 | 45 | act->begin = *begin; 46 | act->end = *end; 47 | act->next = acts->act; 48 | acts->act = act; 49 | 50 | return act; 51 | } 52 | 53 | static void 54 | activity_set_init(struct activity_set *acs) 55 | { 56 | acs->act = NULL; 57 | } 58 | 59 | static struct vblank * 60 | vblank_create(struct vblank_set *vblanks, const struct timespec *vbl_time) 61 | { 62 | struct vblank *vbl; 63 | 64 | vbl = calloc(1, sizeof *vbl); 65 | if (!vbl) 66 | return ERROR_NULL; 67 | 68 | vbl->ts = *vbl_time; 69 | vbl->next = vblanks->vbl; 70 | vblanks->vbl = vbl; 71 | 72 | return vbl; 73 | } 74 | 75 | static void 76 | vblank_set_init(struct vblank_set *vblanks) 77 | { 78 | vblanks->vbl = NULL; 79 | } 80 | 81 | static struct transition * 82 | transition_create(struct transition_set *tset, const struct timespec *ts) 83 | { 84 | struct transition *trans; 85 | 86 | trans = calloc(1, sizeof *trans); 87 | if (!trans) 88 | return ERROR_NULL; 89 | 90 | trans->ts = *ts; 91 | trans->next = tset->trans; 92 | tset->trans = trans; 93 | 94 | return trans; 95 | } 96 | 97 | static void 98 | transition_set_init(struct transition_set *tset, const char *style) 99 | { 100 | tset->trans = NULL; 101 | tset->style = style; 102 | } 103 | 104 | static void 105 | line_graph_init(struct line_graph *lg, const char *style, const char *label) 106 | { 107 | lg->block = NULL; 108 | lg->style = style; 109 | lg->label = label; 110 | } 111 | 112 | static struct output_graph * 113 | get_output_graph(struct parse_context *ctx, struct object_info *output) 114 | { 115 | struct output_graph *og; 116 | struct info_weston_output *wo; 117 | 118 | if (!output) 119 | return NULL; 120 | 121 | assert(output->type == TYPE_WESTON_OUTPUT); 122 | wo = &output->info.wo; 123 | 124 | if (wo->output_gr) 125 | return wo->output_gr; 126 | 127 | og = calloc(1, sizeof *og); 128 | if (!og) 129 | return ERROR_NULL; 130 | 131 | line_graph_init(&og->delay_line, "delay_line", "delay before repaint"); 132 | line_graph_init(&og->submit_line, "submit_line", "output_repaint()"); 133 | line_graph_init(&og->gpu_line, "gpu_line", "time to hit presentation"); 134 | line_graph_init(&og->renderer_gpu_line, "renderer_gpu_line", "gpu rendering"); 135 | transition_set_init(&og->begins, "trans_begin"); 136 | transition_set_init(&og->posts, "trans_post"); 137 | vblank_set_init(&og->vblanks); 138 | activity_set_init(&og->not_looping); 139 | 140 | timespec_invalidate(&og->last_req); 141 | timespec_invalidate(&og->last_finished); 142 | timespec_invalidate(&og->last_begin); 143 | timespec_invalidate(&og->last_posted); 144 | timespec_invalidate(&og->last_exit_loop); 145 | timespec_invalidate(&og->last_renderer_gpu_begin); 146 | og->info = wo; 147 | og->next = ctx->gdata->output; 148 | ctx->gdata->output = og; 149 | 150 | wo->output_gr = og; 151 | 152 | return og; 153 | } 154 | 155 | static struct line_block * 156 | line_block_create(struct line_graph *linegr, const struct timespec *begin, 157 | const struct timespec *end, const char *style) 158 | { 159 | struct line_block *lb; 160 | 161 | lb = calloc(1, sizeof *lb); 162 | if (!lb) 163 | return ERROR_NULL; 164 | 165 | lb->begin = *begin; 166 | lb->end = *end; 167 | lb->style = style; 168 | lb->next = linegr->block; 169 | linegr->block = lb; 170 | 171 | return lb; 172 | } 173 | 174 | static int 175 | core_repaint_begin(struct parse_context *ctx, const struct timespec *ts, 176 | struct json_object *jobj) 177 | { 178 | struct object_info *output; 179 | struct output_graph *og; 180 | 181 | output = get_object_info_from_timepoint(ctx, jobj, "wo"); 182 | og = get_output_graph(ctx, output); 183 | if (!og) 184 | return ERROR; 185 | 186 | og->last_begin = *ts; 187 | 188 | if (timespec_is_valid(&og->last_finished)) { 189 | struct line_block *lb; 190 | struct transition *trans; 191 | 192 | lb = line_block_create(&og->delay_line, &og->last_finished, 193 | ts, "repaint_delay"); 194 | if (!lb) 195 | return ERROR; 196 | 197 | trans = transition_create(&og->begins, ts); 198 | if (!trans) 199 | return ERROR; 200 | } 201 | 202 | timespec_invalidate(&og->last_finished); 203 | 204 | return 0; 205 | } 206 | 207 | static int 208 | core_repaint_posted(struct parse_context *ctx, const struct timespec *ts, 209 | struct json_object *jobj) 210 | { 211 | struct object_info *output; 212 | struct output_graph *og; 213 | 214 | output = get_object_info_from_timepoint(ctx, jobj, "wo"); 215 | og = get_output_graph(ctx, output); 216 | if (!og) 217 | return ERROR; 218 | 219 | og->last_posted = *ts; 220 | 221 | if (timespec_is_valid(&og->last_begin)) { 222 | struct line_block *lb; 223 | struct transition *trans; 224 | 225 | lb = line_block_create(&og->submit_line, &og->last_begin, 226 | ts, "repaint_submit"); 227 | if (!lb) 228 | return ERROR; 229 | 230 | trans = transition_create(&og->posts, ts); 231 | if (!trans) 232 | return ERROR; 233 | } 234 | 235 | timespec_invalidate(&og->last_begin); 236 | 237 | return 0; 238 | } 239 | 240 | static void 241 | process_need_list(struct update_graph *update_gr, 242 | const struct timespec *vblank) 243 | { 244 | struct update *update; 245 | 246 | update = update_gr->need_vblank; 247 | if (!update) 248 | return; 249 | 250 | while (1) { 251 | update->vblank = *vblank; 252 | 253 | if (!update->next) 254 | break; 255 | 256 | update = update->next; 257 | } 258 | 259 | update->next = update_gr->updates; 260 | update_gr->updates = update; 261 | update_gr->need_vblank = NULL; 262 | } 263 | 264 | static int 265 | core_repaint_finished(struct parse_context *ctx, const struct timespec *ts, 266 | struct json_object *jobj) 267 | { 268 | struct object_info *output; 269 | struct output_graph *og; 270 | 271 | output = get_object_info_from_timepoint(ctx, jobj, "wo"); 272 | og = get_output_graph(ctx, output); 273 | if (!og) 274 | return ERROR; 275 | 276 | og->last_finished = *ts; 277 | 278 | if (timespec_is_valid(&og->last_posted)) { 279 | struct line_block *lb; 280 | struct vblank *vbl; 281 | struct update_graph *ugr; 282 | 283 | lb = line_block_create(&og->gpu_line, &og->last_posted, 284 | ts, "repaint_gpu"); 285 | if (!lb) 286 | return ERROR; 287 | 288 | /* XXX: use the real vblank time, not ts */ 289 | vbl = vblank_create(&og->vblanks, ts); 290 | if (!vbl) 291 | return ERROR; 292 | 293 | for (ugr = og->updates; ugr; ugr = ugr->next) 294 | process_need_list(ugr, &vbl->ts); 295 | } 296 | 297 | timespec_invalidate(&og->last_posted); 298 | 299 | return 0; 300 | } 301 | 302 | static int 303 | core_repaint_req(struct parse_context *ctx, const struct timespec *ts, 304 | struct json_object *jobj) 305 | { 306 | struct object_info *output; 307 | struct output_graph *og; 308 | 309 | output = get_object_info_from_timepoint(ctx, jobj, "wo"); 310 | og = get_output_graph(ctx, output); 311 | if (!og) 312 | return ERROR; 313 | 314 | og->last_req = *ts; 315 | 316 | return 0; 317 | } 318 | 319 | static int 320 | core_repaint_exit_loop(struct parse_context *ctx, const struct timespec *ts, 321 | struct json_object *jobj) 322 | { 323 | struct object_info *output; 324 | struct output_graph *og; 325 | 326 | output = get_object_info_from_timepoint(ctx, jobj, "wo"); 327 | og = get_output_graph(ctx, output); 328 | if (!og) 329 | return ERROR; 330 | 331 | og->last_exit_loop = *ts; 332 | 333 | return 0; 334 | } 335 | 336 | static int 337 | core_repaint_enter_loop(struct parse_context *ctx, const struct timespec *ts, 338 | struct json_object *jobj) 339 | { 340 | struct object_info *output; 341 | struct output_graph *og; 342 | struct activity *act; 343 | 344 | output = get_object_info_from_timepoint(ctx, jobj, "wo"); 345 | og = get_output_graph(ctx, output); 346 | if (!og) 347 | return ERROR; 348 | 349 | if (!timespec_is_valid(&og->last_exit_loop)) { 350 | og->last_exit_loop.tv_sec = 0; 351 | og->last_exit_loop.tv_nsec = 0; 352 | } 353 | 354 | act = activity_create(&og->not_looping, &og->last_exit_loop, ts); 355 | if (!act) 356 | return ERROR; 357 | 358 | timespec_invalidate(&og->last_exit_loop); 359 | 360 | return 0; 361 | } 362 | 363 | static struct update * 364 | create_update(const struct timespec *damaged) 365 | { 366 | struct update *update; 367 | 368 | update = calloc(1, sizeof *update); 369 | if (!update) 370 | return ERROR_NULL; 371 | 372 | update->damage = *damaged; 373 | timespec_invalidate(&update->flush); 374 | timespec_invalidate(&update->vblank); 375 | 376 | return update; 377 | } 378 | 379 | static struct update_graph * 380 | create_update_graph(struct output_graph *output_gr, 381 | struct info_weston_surface *iws) 382 | { 383 | struct update_graph *update_gr; 384 | 385 | update_gr = calloc(1, sizeof *update_gr); 386 | if (!update_gr) 387 | return ERROR_NULL; 388 | 389 | update_gr->label = strdup(iws->description); 390 | update_gr->style = "damage"; 391 | update_gr->next = output_gr->updates; 392 | output_gr->updates = update_gr; 393 | 394 | return update_gr; 395 | } 396 | 397 | static struct surface_graph_list * 398 | create_surface_graph_list(struct info_weston_surface *iws, 399 | struct output_graph *output_gr) 400 | { 401 | struct surface_graph_list *sgl; 402 | 403 | assert(output_gr); 404 | 405 | sgl = calloc(1, sizeof *sgl); 406 | if (!sgl) 407 | return ERROR_NULL; 408 | 409 | sgl->update_gr = create_update_graph(output_gr, iws); 410 | sgl->output_gr = output_gr; 411 | sgl->next = iws->glist; 412 | iws->glist = sgl; 413 | 414 | if (!sgl->update_gr) 415 | return ERROR_NULL; 416 | 417 | return sgl; 418 | } 419 | 420 | static struct surface_graph_list * 421 | get_surface_graph_list_default(struct parse_context *ctx, 422 | struct info_weston_surface *iws) 423 | { 424 | struct output_graph *output_gr; 425 | struct surface_graph_list *sgl; 426 | 427 | if (iws->last) 428 | return iws->last; 429 | 430 | assert(iws->glist == NULL); 431 | 432 | /* By default, pick whatever the first output is. */ 433 | output_gr = ctx->gdata->output; 434 | if (!output_gr) 435 | return NULL; 436 | 437 | sgl = create_surface_graph_list(iws, output_gr); 438 | if (!sgl) 439 | return ERROR_NULL; 440 | 441 | iws->last = sgl; 442 | 443 | return sgl; 444 | } 445 | 446 | static struct surface_graph_list * 447 | get_surface_graph_list(struct parse_context *ctx, 448 | struct info_weston_surface *iws, 449 | struct output_graph *output_gr) 450 | { 451 | struct surface_graph_list *sgl; 452 | 453 | assert(output_gr); 454 | 455 | if (iws->last && iws->last->output_gr == output_gr) 456 | return iws->last; 457 | 458 | for (sgl = iws->glist; sgl; sgl = sgl->next) { 459 | if (sgl->output_gr == output_gr) 460 | return sgl; 461 | } 462 | 463 | sgl = create_surface_graph_list(iws, output_gr); 464 | if (!sgl) 465 | return ERROR_NULL; 466 | 467 | iws->last = sgl; 468 | 469 | return sgl; 470 | } 471 | 472 | static int 473 | put_update_to_graph_list(struct surface_graph_list *sgl, struct update *update) 474 | { 475 | if (!update) 476 | return 0; 477 | 478 | assert(update->next == NULL); 479 | update->next = sgl->update_gr->updates; 480 | sgl->update_gr->updates = update; 481 | 482 | return 0; 483 | } 484 | 485 | static int 486 | put_update_to_need_list(struct surface_graph_list *sgl, struct update *update) 487 | { 488 | if (!update) 489 | return 0; 490 | 491 | assert(update->next == NULL); 492 | update->next = sgl->update_gr->need_vblank; 493 | sgl->update_gr->need_vblank = update; 494 | 495 | return 0; 496 | } 497 | 498 | static int 499 | core_commit_damage(struct parse_context *ctx, const struct timespec *ts, 500 | struct json_object *jobj) 501 | { 502 | struct object_info *surface; 503 | struct surface_graph_list *sgl; 504 | 505 | surface = get_object_info_from_timepoint(ctx, jobj, "ws"); 506 | if (!surface || surface->type != TYPE_WESTON_SURFACE) 507 | return ERROR; 508 | 509 | sgl = get_surface_graph_list_default(ctx, &surface->info.ws); 510 | if (!sgl) { 511 | fprintf(stderr, "info: ignoring core_commit_damage event at" 512 | " %" PRId64 ".%09ld\n", 513 | (int64_t)ts->tv_sec, ts->tv_nsec); 514 | return 0; 515 | } 516 | 517 | if (put_update_to_graph_list(sgl, surface->info.ws.open_update) < 0) 518 | return ERROR; 519 | 520 | surface->info.ws.open_update = create_update(ts); 521 | if (!surface->info.ws.open_update) 522 | return ERROR; 523 | 524 | return 0; 525 | } 526 | 527 | static int 528 | core_flush_damage(struct parse_context *ctx, const struct timespec *ts, 529 | struct json_object *jobj) 530 | { 531 | struct object_info *surface; 532 | struct object_info *output; 533 | struct output_graph *og; 534 | struct update *update; 535 | struct surface_graph_list *sgl; 536 | 537 | surface = get_object_info_from_timepoint(ctx, jobj, "ws"); 538 | if (!surface || surface->type != TYPE_WESTON_SURFACE) 539 | return ERROR; 540 | 541 | update = surface->info.ws.open_update; 542 | if (!update) { 543 | update = create_update(ts); 544 | if (!update) 545 | return ERROR; 546 | 547 | timespec_invalidate(&update->damage); 548 | } 549 | surface->info.ws.open_update = NULL; 550 | 551 | output = get_object_info_from_timepoint(ctx, jobj, "wo"); 552 | og = get_output_graph(ctx, output); 553 | if (!og) 554 | return ERROR; 555 | 556 | update->flush = *ts; 557 | 558 | sgl = get_surface_graph_list(ctx, &surface->info.ws, og); 559 | if (!sgl) 560 | return ERROR; 561 | 562 | if (put_update_to_need_list(sgl, update) < 0) 563 | return ERROR; 564 | 565 | return 0; 566 | } 567 | 568 | static int 569 | renderer_gpu_begin(struct parse_context *ctx, const struct timespec *ts, 570 | struct json_object *jobj) 571 | { 572 | struct object_info *output; 573 | struct output_graph *og; 574 | 575 | output = get_object_info_from_timepoint(ctx, jobj, "wo"); 576 | og = get_output_graph(ctx, output); 577 | if (!og) 578 | return ERROR; 579 | 580 | og->last_renderer_gpu_begin = 581 | get_timespec_from_timepoint(ctx, jobj, "gpu"); 582 | 583 | return 0; 584 | } 585 | 586 | static int 587 | renderer_gpu_end(struct parse_context *ctx, const struct timespec *ts, 588 | struct json_object *jobj) 589 | { 590 | struct object_info *output; 591 | struct output_graph *og; 592 | 593 | output = get_object_info_from_timepoint(ctx, jobj, "wo"); 594 | og = get_output_graph(ctx, output); 595 | if (!og) 596 | return ERROR; 597 | 598 | if (timespec_is_valid(&og->last_renderer_gpu_begin)) { 599 | struct timespec gpu_ts; 600 | struct line_block *lb; 601 | 602 | gpu_ts = get_timespec_from_timepoint(ctx, jobj, "gpu"); 603 | 604 | lb = line_block_create(&og->renderer_gpu_line, 605 | &og->last_renderer_gpu_begin, 606 | &gpu_ts, "renderer_gpu"); 607 | if (!lb) 608 | return ERROR; 609 | } 610 | 611 | timespec_invalidate(&og->last_renderer_gpu_begin); 612 | 613 | return 0; 614 | } 615 | 616 | int 617 | graph_data_end(struct graph_data *gdata) 618 | { 619 | struct timespec invalid = { 0, 0 }; 620 | struct output_graph *og; 621 | struct update_graph *upg; 622 | 623 | timespec_invalidate(&invalid); 624 | 625 | for (og = gdata->output; og; og = og->next) { 626 | if (timespec_is_valid(&og->last_exit_loop)) { 627 | struct activity *act; 628 | 629 | act = activity_create(&og->not_looping, 630 | &og->last_exit_loop, &invalid); 631 | if (!act) 632 | return ERROR; 633 | } 634 | 635 | for (upg = og->updates; upg; upg = upg->next) 636 | process_need_list(upg, &invalid); 637 | } 638 | 639 | return 0; 640 | } 641 | 642 | const struct tp_handler_item tp_handler_list[] = { 643 | { "core_repaint_enter_loop", core_repaint_enter_loop }, 644 | { "core_repaint_exit_loop", core_repaint_exit_loop }, 645 | { "core_repaint_finished", core_repaint_finished }, 646 | { "core_repaint_begin", core_repaint_begin }, 647 | { "core_repaint_posted", core_repaint_posted }, 648 | { "core_repaint_req", core_repaint_req }, 649 | { "core_commit_damage", core_commit_damage }, 650 | { "core_flush_damage", core_flush_damage }, 651 | { "renderer_gpu_begin", renderer_gpu_begin}, 652 | { "renderer_gpu_end", renderer_gpu_end}, 653 | { NULL, NULL } 654 | }; 655 | 656 | -------------------------------------------------------------------------------- /legend.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | begin repaint 5 | 6 | 7 | 8 | 9 | post repaint 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | vblank 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | damage commit 28 | repaint flush 29 | hit screen 30 | 31 | 32 | -------------------------------------------------------------------------------- /parse.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2014 Pekka Paalanen 3 | * 4 | * Permission to use, copy, modify, distribute, and sell this software and 5 | * its documentation for any purpose is hereby granted without fee, provided 6 | * that the above copyright notice appear in all copies and that both that 7 | * copyright notice and this permission notice appear in supporting 8 | * documentation, and that the name of the copyright holders not be used in 9 | * advertising or publicity pertaining to distribution of the software 10 | * without specific, written prior permission. The copyright holders make 11 | * no representations about the suitability of this software for any 12 | * purpose. It is provided "as is" without express or implied warranty. 13 | * 14 | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS 15 | * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 16 | * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY 17 | * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER 18 | * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF 19 | * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 20 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 | */ 22 | 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include 30 | 31 | #include "wesgr.h" 32 | 33 | static void 34 | lookup_table_init(struct lookup_table *tbl) 35 | { 36 | tbl->id_base = 0; 37 | tbl->alloc = 0; 38 | tbl->array = NULL; 39 | } 40 | 41 | static int 42 | lookup_table_ensure(struct lookup_table *tbl, unsigned n) 43 | { 44 | void **arr; 45 | unsigned i; 46 | 47 | if (n <= tbl->alloc) 48 | return 0; 49 | 50 | n = (n / 512 + 1) * 512; 51 | if (n <= tbl->alloc) 52 | return ERROR; 53 | 54 | arr = realloc(tbl->array, n * sizeof(void *)); 55 | if (!arr) 56 | return ERROR; 57 | 58 | for (i = tbl->alloc; i < n; i++) 59 | arr[i] = NULL; 60 | 61 | tbl->array = arr; 62 | tbl->alloc = n; 63 | 64 | return 0; 65 | } 66 | 67 | static void * 68 | lookup_table_get(struct lookup_table *tbl, unsigned id) 69 | { 70 | unsigned i = id - tbl->id_base; 71 | 72 | if (i >= tbl->alloc) 73 | return NULL; 74 | 75 | return tbl->array[i]; 76 | } 77 | 78 | static int 79 | lookup_table_set(struct lookup_table *tbl, unsigned id, void *data) 80 | { 81 | unsigned i; 82 | 83 | if (id == 0) 84 | return -1; 85 | 86 | if (tbl->id_base == 0) 87 | tbl->id_base = id; 88 | 89 | i = id - tbl->id_base; 90 | if (lookup_table_ensure(tbl, i + 1) < 0) 91 | return ERROR; 92 | 93 | tbl->array[i] = data; 94 | 95 | return 0; 96 | } 97 | 98 | static void 99 | lookup_table_for_each(struct lookup_table *tbl, 100 | void (*func)(void **, void*), void *data) 101 | { 102 | unsigned i; 103 | 104 | for (i = 0; i < tbl->alloc; i++) 105 | if (tbl->array[i]) 106 | (*func)(&tbl->array[i], data); 107 | } 108 | 109 | static void 110 | lookup_table_release(struct lookup_table *tbl) 111 | { 112 | free(tbl->array); 113 | } 114 | 115 | int 116 | parse_context_init(struct parse_context *ctx, struct graph_data *gdata) 117 | { 118 | lookup_table_init(&ctx->idmap); 119 | ctx->gdata = gdata; 120 | 121 | return 0; 122 | } 123 | 124 | static void 125 | object_info_destroy(struct object_info *oi) 126 | { 127 | struct surface_graph_list *sgl, *tmp; 128 | 129 | if (oi->jobj) 130 | json_object_put(oi->jobj); 131 | 132 | switch (oi->type) { 133 | default: 134 | case TYPE_WESTON_OUTPUT: 135 | break; 136 | case TYPE_WESTON_SURFACE: 137 | free(oi->info.ws.description); 138 | for (sgl = oi->info.ws.glist; sgl; sgl = tmp) { 139 | tmp = sgl->next; 140 | free(sgl); 141 | } 142 | break; 143 | } 144 | 145 | free(oi); 146 | } 147 | 148 | static void 149 | free_item(void **ptr, void *data) 150 | { 151 | object_info_destroy(*ptr); 152 | *ptr = NULL; 153 | } 154 | 155 | void 156 | parse_context_release(struct parse_context *ctx) 157 | { 158 | lookup_table_for_each(&ctx->idmap, free_item, NULL); 159 | lookup_table_release(&ctx->idmap); 160 | } 161 | 162 | static struct object_info * 163 | object_info_create(unsigned id, enum object_type type) 164 | { 165 | struct object_info *oi; 166 | 167 | oi = calloc(1, sizeof *oi); 168 | if (!oi) 169 | return ERROR_NULL; 170 | 171 | oi->id = id; 172 | oi->type = type; 173 | 174 | return oi; 175 | } 176 | 177 | static int 178 | object_info_update(struct object_info *oi, enum object_type type, 179 | struct json_object *jobj) 180 | { 181 | if (oi->type != type) 182 | return ERROR; 183 | 184 | if (oi->jobj) 185 | json_object_put(oi->jobj); 186 | oi->jobj = json_object_get(jobj); 187 | 188 | return 0; 189 | } 190 | 191 | static int 192 | get_object_type(enum object_type *type, const char *type_name) 193 | { 194 | static const struct { 195 | const char *name; 196 | enum object_type type; 197 | } map[] = { 198 | { "weston_output", TYPE_WESTON_OUTPUT }, 199 | { "weston_surface", TYPE_WESTON_SURFACE }, 200 | }; 201 | unsigned i; 202 | 203 | for (i = 0; i < ARRAY_LENGTH(map); i++) { 204 | if (strcmp(map[i].name, type_name) == 0) { 205 | *type = map[i].type; 206 | return 0; 207 | } 208 | } 209 | 210 | return ERROR; 211 | } 212 | 213 | static int 214 | parse_id(unsigned *id, struct json_object *jobj) 215 | { 216 | int64_t val; 217 | 218 | errno = 0; 219 | val = json_object_get_int64(jobj); 220 | if (errno) 221 | return ERROR; 222 | 223 | if (val < 0 || val > UINT_MAX) 224 | return ERROR; 225 | 226 | *id = val; 227 | 228 | return 0; 229 | } 230 | 231 | static int 232 | parse_weston_output(struct parse_context *ctx, struct object_info *oi) 233 | { 234 | struct json_object *name_jobj; 235 | 236 | if (!json_object_object_get_ex(oi->jobj, "name", &name_jobj)) 237 | return ERROR; 238 | 239 | oi->info.wo.name = json_object_get_string(name_jobj); 240 | 241 | return 0; 242 | } 243 | 244 | static int 245 | parse_weston_surface(struct parse_context *ctx, struct object_info *oi) 246 | { 247 | struct json_object *desc_jobj; 248 | struct json_object *parent; 249 | const char *desc; 250 | char str[64]; 251 | int ret; 252 | 253 | if (!json_object_object_get_ex(oi->jobj, "desc", &desc_jobj)) 254 | return ERROR; 255 | 256 | desc = json_object_get_string(desc_jobj); 257 | if (!desc) { 258 | snprintf(str, sizeof(str), "[id:%u]", oi->id); 259 | desc = str; 260 | } 261 | 262 | free(oi->info.ws.description); 263 | oi->info.ws.description = NULL; 264 | 265 | if (json_object_object_get_ex(oi->jobj, "main_surface", &parent)) { 266 | unsigned id; 267 | struct object_info *poi; 268 | 269 | if (parse_id(&id, parent) < 0) 270 | return ERROR; 271 | 272 | poi = lookup_table_get(&ctx->idmap, id); 273 | if (!poi) 274 | return ERROR; 275 | 276 | ret = asprintf(&oi->info.ws.description, "%s of %s", desc, 277 | poi->info.ws.description); 278 | if (ret < 0) 279 | oi->info.ws.description = NULL; 280 | } else { 281 | oi->info.ws.description = strdup(desc); 282 | } 283 | 284 | if (!oi->info.ws.description) 285 | return ERROR; 286 | 287 | return 0; 288 | } 289 | 290 | static int 291 | parse_context_process_info(struct parse_context *ctx, 292 | struct json_object *jobj, 293 | struct json_object *id_jobj) 294 | { 295 | unsigned id; 296 | struct object_info *oi; 297 | struct json_object *type_jobj; 298 | enum object_type type; 299 | 300 | if (parse_id(&id, id_jobj) < 0) 301 | return ERROR; 302 | 303 | if (!json_object_object_get_ex(jobj, "type", &type_jobj)) 304 | return ERROR; 305 | 306 | if (!json_object_is_type(type_jobj, json_type_string)) 307 | return ERROR; 308 | 309 | if (get_object_type(&type, json_object_get_string(type_jobj)) < 0) 310 | return ERROR; 311 | 312 | oi = lookup_table_get(&ctx->idmap, id); 313 | if (!oi) { 314 | oi = object_info_create(id, type); 315 | if (lookup_table_set(&ctx->idmap, id, oi) < 0) 316 | return ERROR; 317 | } 318 | 319 | if (object_info_update(oi, type, jobj) < 0) 320 | return ERROR; 321 | 322 | switch (oi->type) { 323 | case TYPE_WESTON_OUTPUT: 324 | return parse_weston_output(ctx, oi); 325 | case TYPE_WESTON_SURFACE: 326 | return parse_weston_surface(ctx, oi); 327 | } 328 | 329 | return 0; 330 | } 331 | 332 | static int 333 | parse_int(int64_t *r, struct json_object *jobj) 334 | { 335 | int64_t value; 336 | 337 | if (!jobj || !json_object_is_type(jobj, json_type_int)) 338 | return ERROR; 339 | 340 | errno = 0; 341 | value = json_object_get_int64(jobj); 342 | if (errno) 343 | return ERROR; 344 | 345 | *r = value; 346 | return 0; 347 | } 348 | 349 | static int 350 | parse_timespec(struct timespec *ts_out, struct json_object *jobj) 351 | { 352 | int64_t v; 353 | struct timespec ts; 354 | 355 | if (!json_object_is_type(jobj, json_type_array)) 356 | return ERROR; 357 | 358 | if (json_object_array_length(jobj) != 2) 359 | return ERROR; 360 | 361 | if (parse_int(&v, json_object_array_get_idx(jobj, 0)) < 0) 362 | return ERROR; 363 | ts.tv_sec = v; 364 | 365 | if (parse_int(&v, json_object_array_get_idx(jobj, 1)) < 0) 366 | return ERROR; 367 | ts.tv_nsec = v; 368 | 369 | *ts_out = ts; 370 | 371 | return 0; 372 | } 373 | 374 | static int 375 | parse_context_process_timepoint(struct parse_context *ctx, 376 | struct json_object *jobj, 377 | struct json_object *T_jobj) 378 | { 379 | struct timespec ts; 380 | struct json_object *name_jobj; 381 | const char *name; 382 | unsigned i; 383 | 384 | if (parse_timespec(&ts, T_jobj) < 0) 385 | return ERROR; 386 | 387 | if (!json_object_object_get_ex(jobj, "N", &name_jobj)) 388 | return ERROR; 389 | 390 | if (!json_object_is_type(name_jobj, json_type_string)) 391 | return ERROR; 392 | 393 | graph_data_time(ctx->gdata, &ts); 394 | name = json_object_get_string(name_jobj); 395 | for (i = 0; tp_handler_list[i].tp_name; i++) 396 | if (strcmp(tp_handler_list[i].tp_name, name) == 0) 397 | return tp_handler_list[i].func(ctx, &ts, jobj); 398 | 399 | fprintf(stderr, "unhandled timepoint '%s'\n", name); 400 | 401 | return 0; 402 | } 403 | 404 | int 405 | parse_context_process_object(struct parse_context *ctx, 406 | struct json_object *jobj) 407 | { 408 | struct json_object *key_obj; 409 | 410 | if (!json_object_is_type(jobj, json_type_object)) 411 | return ERROR; 412 | 413 | if (json_object_object_get_ex(jobj, "id", &key_obj)) 414 | return parse_context_process_info(ctx, jobj, key_obj); 415 | 416 | if (json_object_object_get_ex(jobj, "T", &key_obj)) 417 | return parse_context_process_timepoint(ctx, jobj, key_obj); 418 | 419 | return ERROR; 420 | } 421 | 422 | struct object_info * 423 | get_object_info_from_timepoint(struct parse_context *ctx, 424 | struct json_object *jobj, const char *member) 425 | { 426 | struct json_object *mem_jobj; 427 | int64_t value; 428 | unsigned id; 429 | 430 | if (!json_object_object_get_ex(jobj, member, &mem_jobj)) 431 | return ERROR_NULL; 432 | 433 | if (parse_int(&value, mem_jobj) < 0) 434 | return ERROR_NULL; 435 | id = value; 436 | 437 | return lookup_table_get(&ctx->idmap, id); 438 | } 439 | 440 | struct timespec 441 | get_timespec_from_timepoint(struct parse_context *ctx, 442 | struct json_object *jobj, const char *member) 443 | { 444 | struct json_object *mem_jobj; 445 | struct timespec ts; 446 | 447 | timespec_invalidate(&ts); 448 | 449 | if (!json_object_object_get_ex(jobj, member, &mem_jobj)) 450 | return ts; 451 | 452 | parse_timespec(&ts, mem_jobj); 453 | 454 | return ts; 455 | } 456 | -------------------------------------------------------------------------------- /resdata.S: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2015 Collabora, Ltd. 3 | * 4 | * Permission to use, copy, modify, distribute, and sell this software and 5 | * its documentation for any purpose is hereby granted without fee, provided 6 | * that the above copyright notice appear in all copies and that both that 7 | * copyright notice and this permission notice appear in supporting 8 | * documentation, and that the name of the copyright holders not be used in 9 | * advertising or publicity pertaining to distribution of the software 10 | * without specific, written prior permission. The copyright holders make 11 | * no representations about the suitability of this software for any 12 | * purpose. It is provided "as is" without express or implied warranty. 13 | * 14 | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS 15 | * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 16 | * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY 17 | * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER 18 | * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF 19 | * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 20 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 | */ 22 | 23 | /* from: http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967#comment-348129 */ 24 | 25 | .altmacro 26 | .macro binfile name file 27 | .p2align 2 28 | .globl \name&_begin 29 | \name&_begin: 30 | .incbin \file 31 | \name&_end: 32 | .byte 0 33 | .p2align 2 34 | .globl \name&_len 35 | \name&_len: 36 | .int (\name&_end - \name&_begin) 37 | .endm 38 | 39 | .section .rodata 40 | binfile RES_style "style.css" 41 | binfile RES_legend "legend.xml" 42 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | text { 2 | font-family: Verdana, Geneva, sans-serif; 3 | font-size: 12px; 4 | } 5 | 6 | text[class~="output_label"] { 7 | font-weight: bold; 8 | } 9 | 10 | g[class~="delay_line"] path, 11 | g[class~="submit_line"] path, 12 | g[class~="gpu_line"] path, 13 | g[class~="renderer_gpu_line"] path { 14 | stroke: black; 15 | stroke-width: 5; 16 | } 17 | 18 | g[class~="trans_begin"] path { 19 | stroke: black; 20 | stroke-width: 1; 21 | } 22 | 23 | g[class~="trans_begin"] circle { 24 | stroke-width: 0; 25 | fill: green; 26 | } 27 | 28 | g[class~="trans_post"] path { 29 | stroke: black; 30 | stroke-width: 1; 31 | } 32 | 33 | g[class~="trans_post"] circle { 34 | stroke-width: 0; 35 | fill: blue; 36 | } 37 | 38 | g[class~="vblank"] path { 39 | stroke: #b00; 40 | stroke-width: 1; 41 | } 42 | 43 | g[class~="vblank"] circle { 44 | stroke-width: 0; 45 | fill: #b00; 46 | } 47 | 48 | g[class~="not_looping"] path { 49 | fill: #ddd; 50 | stroke-width: 0; 51 | } 52 | 53 | g[class~="damage"] path { 54 | stroke: black; 55 | stroke-width: 1; 56 | } 57 | 58 | g[class~="damage"] circle { 59 | stroke-width: 0; 60 | fill: #505; 61 | } 62 | 63 | path.axis, path.major_tick { 64 | stroke: #000; 65 | stroke-width: 1; 66 | } 67 | 68 | path.minor_tick { 69 | stroke: #888; 70 | stroke-width: 1; 71 | } 72 | 73 | text.tick_label { 74 | } 75 | 76 | -------------------------------------------------------------------------------- /testdata/contents.txt: -------------------------------------------------------------------------------- 1 | timeline-1.log 2014-08-16 2 | Original test data, now outdated. 3 | Locally modified Weston repaint algorithm. 4 | 5 | timeline-2.log 2014-09-06 6 | New events core_commit_damage and core_flush_damage. 7 | Locally modified Weston repaint algorithm. 8 | 9 | Recorded on X11-backend, single output, no windows, just hovering over 10 | the panel buttons. 11 | 12 | timeline-3.log 2014-09-19 13 | Captured on DRM backend, two outputs, no correct vblank timestamping 14 | yet. 15 | Locally modified Weston repaint algorithm. 16 | 17 | Contains pointer movement, open weston-terminal, panel tooltip, 18 | simple-egl. Simple-egl is being dragged from one output to the other and 19 | back. 20 | 21 | timeline-egl-move-output.log 2014-10-02 22 | Captured on DRM backend, two outputs. 23 | Correct vblank timestamps, Weston 1.6.0 repaint algorithm. 24 | 25 | Contains simple-egl running, pointer movement, dragging simple-egl 26 | from one output to another. 27 | 28 | timeline-presentation-f.log 2014-10-02 29 | Captured on DRM backend, two outputs. 30 | Correct vblank timestamps, Weston 1.6.0 repaint algorithm. 31 | 32 | Contains presentation-shm -f on one output. 33 | 34 | timeline-presentation-i.log 2014-10-02 35 | Captured on DRM backend, two outputs. 36 | Correct vblank timestamps, Weston 1.6.0 repaint algorithm. 37 | 38 | Contains presentation-shm -i on one output. 39 | 40 | timeline-presentation-p.log 2014-10-02 41 | Captured on DRM backend, two outputs. 42 | Correct vblank timestamps, Weston 1.6.0 repaint algorithm. 43 | 44 | Contains presentation-shm -p on one output. 45 | -------------------------------------------------------------------------------- /testdata/timeline-1.log: -------------------------------------------------------------------------------- 1 | { "id":1, "type":"weston_output", "name":null } 2 | { "id":2, "type":"weston_surface", "desc":"cursor" } 3 | { "T":[9894, 391855448], "N":"core_repaint_req", "wo":1, 4 | "C": [ 5 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 6 | ] } 7 | { "id":2, "type":"weston_surface", "desc":"cursor" } 8 | { "T":[9894, 391975574], "N":"core_repaint_enter_loop", "wo":1, 9 | "C": [ 10 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 11 | ] } 12 | { "T":[9894, 392083409], "N":"core_repaint_finished", "wo":1 } 13 | { "T":[9894, 401243120], "N":"core_repaint_begin", "wo":1 } 14 | { "T":[9894, 402280608], "N":"core_repaint_req", "wo":1, 15 | "C": [ 16 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 17 | ] } 18 | { "T":[9894, 402334665], "N":"core_repaint_posted", "wo":1 } 19 | { "T":[9894, 412376049], "N":"core_repaint_finished", "wo":1 } 20 | { "T":[9894, 421528427], "N":"core_repaint_begin", "wo":1 } 21 | { "T":[9894, 422284036], "N":"core_repaint_req", "wo":1, 22 | "C": [ 23 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 24 | ] } 25 | { "T":[9894, 422346125], "N":"core_repaint_posted", "wo":1 } 26 | { "T":[9894, 432379896], "N":"core_repaint_finished", "wo":1 } 27 | { "T":[9894, 441533811], "N":"core_repaint_begin", "wo":1 } 28 | { "T":[9894, 442270982], "N":"core_repaint_req", "wo":1, 29 | "C": [ 30 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 31 | ] } 32 | { "T":[9894, 442340334], "N":"core_repaint_posted", "wo":1 } 33 | { "T":[9894, 452376131], "N":"core_repaint_finished", "wo":1 } 34 | { "T":[9894, 461529487], "N":"core_repaint_begin", "wo":1 } 35 | { "T":[9894, 462264354], "N":"core_repaint_req", "wo":1, 36 | "C": [ 37 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 38 | ] } 39 | { "T":[9894, 462325115], "N":"core_repaint_posted", "wo":1 } 40 | { "T":[9894, 472315725], "N":"core_repaint_finished", "wo":1 } 41 | { "T":[9894, 481466916], "N":"core_repaint_begin", "wo":1 } 42 | { "T":[9894, 482211490], "N":"core_repaint_req", "wo":1, 43 | "C": [ 44 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 45 | ] } 46 | { "T":[9894, 482280214], "N":"core_repaint_posted", "wo":1 } 47 | { "T":[9894, 492262163], "N":"core_repaint_finished", "wo":1 } 48 | { "T":[9894, 501423621], "N":"core_repaint_begin", "wo":1 } 49 | { "T":[9894, 502176646], "N":"core_repaint_req", "wo":1, 50 | "C": [ 51 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 52 | ] } 53 | { "T":[9894, 502237547], "N":"core_repaint_posted", "wo":1 } 54 | { "T":[9894, 512202316], "N":"core_repaint_finished", "wo":1 } 55 | { "T":[9894, 521370339], "N":"core_repaint_begin", "wo":1 } 56 | { "T":[9894, 522163662], "N":"core_repaint_req", "wo":1, 57 | "C": [ 58 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 59 | ] } 60 | { "T":[9894, 522235808], "N":"core_repaint_posted", "wo":1 } 61 | { "T":[9894, 532267344], "N":"core_repaint_finished", "wo":1 } 62 | { "T":[9894, 541430478], "N":"core_repaint_begin", "wo":1 } 63 | { "T":[9894, 542186297], "N":"core_repaint_req", "wo":1, 64 | "C": [ 65 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 66 | ] } 67 | { "T":[9894, 542248595], "N":"core_repaint_posted", "wo":1 } 68 | { "T":[9894, 552287534], "N":"core_repaint_finished", "wo":1 } 69 | { "T":[9894, 561447316], "N":"core_repaint_begin", "wo":1 } 70 | { "T":[9894, 562240081], "N":"core_repaint_req", "wo":1, 71 | "C": [ 72 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 73 | ] } 74 | { "T":[9894, 562310690], "N":"core_repaint_posted", "wo":1 } 75 | { "T":[9894, 572289846], "N":"core_repaint_finished", "wo":1 } 76 | { "T":[9894, 581456192], "N":"core_repaint_begin", "wo":1 } 77 | { "T":[9894, 582207890], "N":"core_repaint_req", "wo":1, 78 | "C": [ 79 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 80 | ] } 81 | { "T":[9894, 582269909], "N":"core_repaint_posted", "wo":1 } 82 | { "T":[9894, 592256608], "N":"core_repaint_finished", "wo":1 } 83 | { "T":[9894, 601416878], "N":"core_repaint_begin", "wo":1 } 84 | { "T":[9894, 602170671], "N":"core_repaint_req", "wo":1, 85 | "C": [ 86 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 87 | ] } 88 | { "T":[9894, 602232481], "N":"core_repaint_posted", "wo":1 } 89 | { "T":[9894, 612278753], "N":"core_repaint_finished", "wo":1 } 90 | { "T":[9894, 621434205], "N":"core_repaint_begin", "wo":1 } 91 | { "T":[9894, 622184855], "N":"core_repaint_req", "wo":1, 92 | "C": [ 93 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 94 | ] } 95 | { "T":[9894, 622337877], "N":"core_repaint_posted", "wo":1 } 96 | { "T":[9894, 632286442], "N":"core_repaint_finished", "wo":1 } 97 | { "T":[9894, 641445735], "N":"core_repaint_begin", "wo":1 } 98 | { "T":[9894, 642226347], "N":"core_repaint_req", "wo":1, 99 | "C": [ 100 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 101 | ] } 102 | { "T":[9894, 642297864], "N":"core_repaint_posted", "wo":1 } 103 | { "T":[9894, 652326887], "N":"core_repaint_finished", "wo":1 } 104 | { "T":[9894, 661484503], "N":"core_repaint_begin", "wo":1 } 105 | { "T":[9894, 662241160], "N":"core_repaint_req", "wo":1, 106 | "C": [ 107 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 108 | ] } 109 | { "T":[9894, 662302410], "N":"core_repaint_posted", "wo":1 } 110 | { "T":[9894, 672292042], "N":"core_repaint_finished", "wo":1 } 111 | { "T":[9894, 681450776], "N":"core_repaint_begin", "wo":1 } 112 | { "T":[9894, 682209668], "N":"core_repaint_req", "wo":1, 113 | "C": [ 114 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 115 | ] } 116 | { "T":[9894, 682279928], "N":"core_repaint_posted", "wo":1 } 117 | { "T":[9894, 692260690], "N":"core_repaint_finished", "wo":1 } 118 | { "T":[9894, 701411811], "N":"core_repaint_begin", "wo":1 } 119 | { "T":[9894, 702169865], "N":"core_repaint_req", "wo":1, 120 | "C": [ 121 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 122 | ] } 123 | { "T":[9894, 702231325], "N":"core_repaint_posted", "wo":1 } 124 | { "T":[9894, 712271452], "N":"core_repaint_finished", "wo":1 } 125 | { "T":[9894, 721429417], "N":"core_repaint_begin", "wo":1 } 126 | { "T":[9894, 722316747], "N":"core_repaint_req", "wo":1, 127 | "C": [ 128 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 129 | ] } 130 | { "T":[9894, 722387915], "N":"core_repaint_posted", "wo":1 } 131 | { "T":[9894, 732418753], "N":"core_repaint_finished", "wo":1 } 132 | { "T":[9894, 741539074], "N":"core_repaint_begin", "wo":1 } 133 | { "T":[9894, 742278550], "N":"core_repaint_req", "wo":1, 134 | "C": [ 135 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 136 | ] } 137 | { "T":[9894, 742339521], "N":"core_repaint_posted", "wo":1 } 138 | { "T":[9894, 752382372], "N":"core_repaint_finished", "wo":1 } 139 | { "T":[9894, 761460789], "N":"core_repaint_begin", "wo":1 } 140 | { "T":[9894, 762264937], "N":"core_repaint_req", "wo":1, 141 | "C": [ 142 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 143 | ] } 144 | { "T":[9894, 762339877], "N":"core_repaint_posted", "wo":1 } 145 | { "T":[9894, 772314423], "N":"core_repaint_finished", "wo":1 } 146 | { "T":[9894, 781473646], "N":"core_repaint_begin", "wo":1 } 147 | { "T":[9894, 782308664], "N":"core_repaint_req", "wo":1, 148 | "C": [ 149 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 150 | ] } 151 | { "T":[9894, 782378365], "N":"core_repaint_posted", "wo":1 } 152 | { "T":[9894, 792332239], "N":"core_repaint_finished", "wo":1 } 153 | { "T":[9894, 801459754], "N":"core_repaint_begin", "wo":1 } 154 | { "T":[9894, 801938374], "N":"core_repaint_req", "wo":1, 155 | "C": [ 156 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 157 | ] } 158 | { "T":[9894, 801979370], "N":"core_repaint_posted", "wo":1 } 159 | { "T":[9894, 812045129], "N":"core_repaint_finished", "wo":1 } 160 | { "T":[9894, 821205818], "N":"core_repaint_begin", "wo":1 } 161 | { "T":[9894, 821929929], "N":"core_repaint_req", "wo":1, 162 | "C": [ 163 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 164 | ] } 165 | { "T":[9894, 822042443], "N":"core_repaint_posted", "wo":1 } 166 | { "T":[9894, 832033472], "N":"core_repaint_finished", "wo":1 } 167 | { "T":[9894, 841199050], "N":"core_repaint_begin", "wo":1 } 168 | { "id":2, "type":"weston_surface", "desc":"cursor" } 169 | { "T":[9894, 842714738], "N":"core_repaint_req", "wo":1, 170 | "C": [ 171 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 172 | ] } 173 | { "T":[9894, 842793170], "N":"core_repaint_posted", "wo":1 } 174 | { "T":[9894, 852812833], "N":"core_repaint_finished", "wo":1 } 175 | { "T":[9894, 861976386], "N":"core_repaint_begin", "wo":1 } 176 | { "T":[9894, 863688677], "N":"core_repaint_req", "wo":1, 177 | "C": [ 178 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 179 | ] } 180 | { "T":[9894, 863759286], "N":"core_repaint_posted", "wo":1 } 181 | { "T":[9894, 873736277], "N":"core_repaint_finished", "wo":1 } 182 | { "T":[9894, 882896687], "N":"core_repaint_begin", "wo":1 } 183 | { "T":[9894, 883631972], "N":"core_repaint_req", "wo":1, 184 | "C": [ 185 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 186 | ] } 187 | { "T":[9894, 883752099], "N":"core_repaint_posted", "wo":1 } 188 | { "T":[9894, 893680201], "N":"core_repaint_finished", "wo":1 } 189 | { "T":[9894, 902840401], "N":"core_repaint_begin", "wo":1 } 190 | { "T":[9894, 903570239], "N":"core_repaint_posted", "wo":1 } 191 | { "T":[9894, 913644239], "N":"core_repaint_finished", "wo":1 } 192 | { "T":[9894, 922804160], "N":"core_repaint_exit_loop", "wo":1 } 193 | { "T":[9894, 922890414], "N":"core_repaint_req", "wo":1, 194 | "C": [ 195 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 196 | ] } 197 | { "T":[9894, 922926032], "N":"core_repaint_enter_loop", "wo":1, 198 | "C": [ 199 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 200 | ] } 201 | { "T":[9894, 922983302], "N":"core_repaint_finished", "wo":1 } 202 | { "T":[9894, 932178633], "N":"core_repaint_begin", "wo":1 } 203 | { "T":[9894, 932866636], "N":"core_repaint_posted", "wo":1 } 204 | { "T":[9894, 942928344], "N":"core_repaint_finished", "wo":1 } 205 | { "T":[9894, 952087077], "N":"core_repaint_exit_loop", "wo":1 } 206 | { "T":[9894, 967764068], "N":"core_repaint_req", "wo":1, 207 | "C": [ 208 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 209 | ] } 210 | { "T":[9894, 967812677], "N":"core_repaint_enter_loop", "wo":1, 211 | "C": [ 212 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 213 | ] } 214 | { "T":[9894, 967873439], "N":"core_repaint_finished", "wo":1 } 215 | { "T":[9894, 977029379], "N":"core_repaint_begin", "wo":1 } 216 | { "T":[9894, 977740151], "N":"core_repaint_posted", "wo":1 } 217 | { "T":[9894, 987855077], "N":"core_repaint_finished", "wo":1 } 218 | { "T":[9894, 997027570], "N":"core_repaint_exit_loop", "wo":1 } 219 | { "id":3, "type":"weston_surface", "desc":"panel for output (null)" } 220 | { "T":[9895, 96644384], "N":"core_repaint_req", "wo":1, 221 | "C": [ 222 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 223 | ] } 224 | { "id":3, "type":"weston_surface", "desc":"panel for output (null)" } 225 | { "T":[9895, 96697603], "N":"core_repaint_enter_loop", "wo":1, 226 | "C": [ 227 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 228 | ] } 229 | { "T":[9895, 96742091], "N":"core_repaint_finished", "wo":1 } 230 | { "T":[9895, 105895657], "N":"core_repaint_begin", "wo":1 } 231 | { "T":[9895, 107641471], "N":"core_repaint_posted", "wo":1 } 232 | { "T":[9895, 117748576], "N":"core_repaint_finished", "wo":1 } 233 | { "T":[9895, 126912059], "N":"core_repaint_exit_loop", "wo":1 } 234 | { "T":[9895, 193661578], "N":"core_repaint_req", "wo":1, 235 | "C": [ 236 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 237 | ] } 238 | { "T":[9895, 193720035], "N":"core_repaint_enter_loop", "wo":1, 239 | "C": [ 240 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 241 | ] } 242 | { "T":[9895, 193763895], "N":"core_repaint_finished", "wo":1 } 243 | { "T":[9895, 202920184], "N":"core_repaint_begin", "wo":1 } 244 | { "T":[9895, 203647089], "N":"core_repaint_posted", "wo":1 } 245 | { "T":[9895, 213698250], "N":"core_repaint_finished", "wo":1 } 246 | { "T":[9895, 222766331], "N":"core_repaint_exit_loop", "wo":1 } 247 | { "T":[9895, 478848963], "N":"core_repaint_req", "wo":1, 248 | "C": [ 249 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 250 | ] } 251 | { "T":[9895, 478916360], "N":"core_repaint_enter_loop", "wo":1, 252 | "C": [ 253 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 254 | ] } 255 | { "T":[9895, 479113940], "N":"core_repaint_finished", "wo":1 } 256 | { "T":[9895, 488259334], "N":"core_repaint_begin", "wo":1 } 257 | { "T":[9895, 489816089], "N":"core_repaint_posted", "wo":1 } 258 | { "T":[9895, 499898819], "N":"core_repaint_finished", "wo":1 } 259 | { "T":[9895, 509022493], "N":"core_repaint_exit_loop", "wo":1 } 260 | { "T":[9895, 999850087], "N":"core_repaint_req", "wo":1, 261 | "C": [ 262 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 263 | ] } 264 | { "T":[9895, 999913992], "N":"core_repaint_enter_loop", "wo":1, 265 | "C": [ 266 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 267 | ] } 268 | { "T":[9895, 999985299], "N":"core_repaint_finished", "wo":1 } 269 | { "T":[9896, 9172878], "N":"core_repaint_begin", "wo":1 } 270 | { "T":[9896, 10204219], "N":"core_repaint_req", "wo":1, 271 | "C": [ 272 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 273 | ] } 274 | { "T":[9896, 10256670], "N":"core_repaint_posted", "wo":1 } 275 | { "T":[9896, 20304968], "N":"core_repaint_finished", "wo":1 } 276 | { "T":[9896, 29458813], "N":"core_repaint_begin", "wo":1 } 277 | { "T":[9896, 30347260], "N":"core_repaint_req", "wo":1, 278 | "C": [ 279 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 280 | ] } 281 | { "T":[9896, 30412421], "N":"core_repaint_posted", "wo":1 } 282 | { "T":[9896, 40394231], "N":"core_repaint_finished", "wo":1 } 283 | { "T":[9896, 49545282], "N":"core_repaint_begin", "wo":1 } 284 | { "T":[9896, 50344123], "N":"core_repaint_req", "wo":1, 285 | "C": [ 286 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 287 | ] } 288 | { "T":[9896, 50415221], "N":"core_repaint_posted", "wo":1 } 289 | { "T":[9896, 60388370], "N":"core_repaint_finished", "wo":1 } 290 | { "T":[9896, 69584469], "N":"core_repaint_begin", "wo":1 } 291 | { "T":[9896, 71506073], "N":"core_repaint_req", "wo":1, 292 | "C": [ 293 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 294 | ] } 295 | { "T":[9896, 71580105], "N":"core_repaint_posted", "wo":1 } 296 | { "T":[9896, 81550810], "N":"core_repaint_finished", "wo":1 } 297 | { "T":[9896, 90712896], "N":"core_repaint_begin", "wo":1 } 298 | { "T":[9896, 91486664], "N":"core_repaint_req", "wo":1, 299 | "C": [ 300 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 301 | ] } 302 | { "T":[9896, 91558251], "N":"core_repaint_posted", "wo":1 } 303 | { "T":[9896, 101544670], "N":"core_repaint_finished", "wo":1 } 304 | { "T":[9896, 110669112], "N":"core_repaint_begin", "wo":1 } 305 | { "T":[9896, 112385733], "N":"core_repaint_req", "wo":1, 306 | "C": [ 307 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 308 | ] } 309 | { "T":[9896, 112442024], "N":"core_repaint_posted", "wo":1 } 310 | { "T":[9896, 122488227], "N":"core_repaint_finished", "wo":1 } 311 | { "T":[9896, 131592066], "N":"core_repaint_begin", "wo":1 } 312 | { "T":[9896, 132305422], "N":"core_repaint_posted", "wo":1 } 313 | { "T":[9896, 142363428], "N":"core_repaint_finished", "wo":1 } 314 | { "T":[9896, 151523279], "N":"core_repaint_exit_loop", "wo":1 } 315 | { "T":[9896, 151606180], "N":"core_repaint_req", "wo":1, 316 | "C": [ 317 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 318 | ] } 319 | { "T":[9896, 151641101], "N":"core_repaint_enter_loop", "wo":1, 320 | "C": [ 321 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 322 | ] } 323 | { "T":[9896, 151697951], "N":"core_repaint_finished", "wo":1 } 324 | { "T":[9896, 160849492], "N":"core_repaint_begin", "wo":1 } 325 | { "T":[9896, 161564104], "N":"core_repaint_posted", "wo":1 } 326 | { "T":[9896, 171634263], "N":"core_repaint_finished", "wo":1 } 327 | { "T":[9896, 180744038], "N":"core_repaint_exit_loop", "wo":1 } 328 | { "T":[9896, 180825612], "N":"core_repaint_req", "wo":1, 329 | "C": [ 330 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 331 | ] } 332 | { "T":[9896, 180860323], "N":"core_repaint_enter_loop", "wo":1, 333 | "C": [ 334 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 335 | ] } 336 | { "T":[9896, 180916196], "N":"core_repaint_finished", "wo":1 } 337 | { "T":[9896, 190069971], "N":"core_repaint_begin", "wo":1 } 338 | { "T":[9896, 190775365], "N":"core_repaint_req", "wo":1, 339 | "C": [ 340 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 341 | ] } 342 | { "T":[9896, 190824673], "N":"core_repaint_posted", "wo":1 } 343 | { "T":[9896, 200877860], "N":"core_repaint_finished", "wo":1 } 344 | { "T":[9896, 210038759], "N":"core_repaint_begin", "wo":1 } 345 | { "T":[9896, 210738635], "N":"core_repaint_req", "wo":1, 346 | "C": [ 347 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":2 } 348 | ] } 349 | { "T":[9896, 210787454], "N":"core_repaint_posted", "wo":1 } 350 | { "T":[9896, 220842666], "N":"core_repaint_finished", "wo":1 } 351 | { "T":[9896, 230042187], "N":"core_repaint_begin", "wo":1 } 352 | { "T":[9896, 230784457], "N":"core_repaint_posted", "wo":1 } 353 | { "T":[9896, 240834501], "N":"core_repaint_finished", "wo":1 } 354 | { "T":[9896, 249993794], "N":"core_repaint_exit_loop", "wo":1 } 355 | { "T":[9896, 400627822], "N":"core_repaint_req", "wo":1, 356 | "C": [ 357 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 358 | ] } 359 | { "T":[9896, 400679784], "N":"core_repaint_enter_loop", "wo":1, 360 | "C": [ 361 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 362 | ] } 363 | { "T":[9896, 400720431], "N":"core_repaint_finished", "wo":1 } 364 | { "T":[9896, 409876860], "N":"core_repaint_begin", "wo":1 } 365 | { "T":[9896, 411668909], "N":"core_repaint_posted", "wo":1 } 366 | { "T":[9896, 421774547], "N":"core_repaint_finished", "wo":1 } 367 | { "T":[9896, 430946131], "N":"core_repaint_exit_loop", "wo":1 } 368 | { "T":[9896, 457487232], "N":"core_repaint_req", "wo":1, 369 | "C": [ 370 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 371 | ] } 372 | { "T":[9896, 457544432], "N":"core_repaint_enter_loop", "wo":1, 373 | "C": [ 374 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":3 } 375 | ] } 376 | { "T":[9896, 457587245], "N":"core_repaint_finished", "wo":1 } 377 | { "T":[9896, 466654277], "N":"core_repaint_begin", "wo":1 } 378 | { "T":[9896, 467358414], "N":"core_repaint_posted", "wo":1 } 379 | { "T":[9896, 477390369], "N":"core_repaint_finished", "wo":1 } 380 | { "T":[9896, 486460056], "N":"core_repaint_exit_loop", "wo":1 } 381 | { "id":4, "type":"weston_surface", "desc":"top-level window 'Wayland Terminal'" } 382 | { "T":[9896, 495187592], "N":"core_repaint_req", "wo":1, 383 | "C": [ 384 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":4 } 385 | ] } 386 | { "id":4, "type":"weston_surface", "desc":"top-level window 'Wayland Terminal'" } 387 | { "T":[9896, 495222791], "N":"core_repaint_enter_loop", "wo":1, 388 | "C": [ 389 | { "f":"weston_surface_schedule_repaint", "l":1174, "ws":4 } 390 | ] } 391 | { "T":[9896, 495253731], "N":"core_repaint_finished", "wo":1 } 392 | { "T":[9896, 504391163], "N":"core_repaint_begin", "wo":1 } 393 | { "id":4, "type":"weston_surface", "desc":"top-level window 'Wayland Terminal'" } 394 | { "T":[9896, 507046377], "N":"core_repaint_req", "wo":1, 395 | "C": [ 396 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 397 | ] } 398 | { "T":[9896, 507109164], "N":"core_repaint_posted", "wo":1 } 399 | { "T":[9896, 517126802], "N":"core_repaint_finished", "wo":1 } 400 | { "T":[9896, 526279879], "N":"core_repaint_begin", "wo":1 } 401 | { "id":4, "type":"weston_surface", "desc":"top-level window 'Wayland Terminal'" } 402 | { "T":[9896, 528621018], "N":"core_repaint_req", "wo":1, 403 | "C": [ 404 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 405 | ] } 406 | { "T":[9896, 528688624], "N":"core_repaint_posted", "wo":1 } 407 | { "T":[9896, 538654649], "N":"core_repaint_finished", "wo":1 } 408 | { "T":[9896, 547821834], "N":"core_repaint_begin", "wo":1 } 409 | { "id":4, "type":"weston_surface", "desc":"top-level window 'pq@farn:~/git/weston'" } 410 | { "T":[9896, 550626786], "N":"core_repaint_req", "wo":1, 411 | "C": [ 412 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 413 | ] } 414 | { "T":[9896, 550721700], "N":"core_repaint_posted", "wo":1 } 415 | { "T":[9896, 560659789], "N":"core_repaint_finished", "wo":1 } 416 | { "T":[9896, 569833120], "N":"core_repaint_begin", "wo":1 } 417 | { "T":[9896, 570647326], "N":"core_repaint_req", "wo":1, 418 | "C": [ 419 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 420 | ] } 421 | { "T":[9896, 570690976], "N":"core_repaint_posted", "wo":1 } 422 | { "T":[9896, 580694157], "N":"core_repaint_finished", "wo":1 } 423 | { "T":[9896, 589846186], "N":"core_repaint_begin", "wo":1 } 424 | { "T":[9896, 590616183], "N":"core_repaint_req", "wo":1, 425 | "C": [ 426 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 427 | ] } 428 | { "T":[9896, 590659624], "N":"core_repaint_posted", "wo":1 } 429 | { "T":[9896, 600717351], "N":"core_repaint_finished", "wo":1 } 430 | { "T":[9896, 609870916], "N":"core_repaint_begin", "wo":1 } 431 | { "T":[9896, 610615351], "N":"core_repaint_req", "wo":1, 432 | "C": [ 433 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 434 | ] } 435 | { "T":[9896, 610657535], "N":"core_repaint_posted", "wo":1 } 436 | { "T":[9896, 620726506], "N":"core_repaint_finished", "wo":1 } 437 | { "T":[9896, 629879373], "N":"core_repaint_begin", "wo":1 } 438 | { "T":[9896, 630616265], "N":"core_repaint_req", "wo":1, 439 | "C": [ 440 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 441 | ] } 442 | { "T":[9896, 630658379], "N":"core_repaint_posted", "wo":1 } 443 | { "T":[9896, 640672875], "N":"core_repaint_finished", "wo":1 } 444 | { "T":[9896, 649827628], "N":"core_repaint_begin", "wo":1 } 445 | { "T":[9896, 650624094], "N":"core_repaint_req", "wo":1, 446 | "C": [ 447 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 448 | ] } 449 | { "T":[9896, 650666627], "N":"core_repaint_posted", "wo":1 } 450 | { "T":[9896, 660678957], "N":"core_repaint_finished", "wo":1 } 451 | { "T":[9896, 669837132], "N":"core_repaint_begin", "wo":1 } 452 | { "T":[9896, 670606081], "N":"core_repaint_req", "wo":1, 453 | "C": [ 454 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 455 | ] } 456 | { "T":[9896, 670648614], "N":"core_repaint_posted", "wo":1 } 457 | { "T":[9896, 680655217], "N":"core_repaint_finished", "wo":1 } 458 | { "T":[9896, 689815627], "N":"core_repaint_begin", "wo":1 } 459 | { "T":[9896, 690664963], "N":"core_repaint_req", "wo":1, 460 | "C": [ 461 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 462 | ] } 463 | { "T":[9896, 690714131], "N":"core_repaint_posted", "wo":1 } 464 | { "T":[9896, 700810340], "N":"core_repaint_finished", "wo":1 } 465 | { "T":[9896, 709983392], "N":"core_repaint_begin", "wo":1 } 466 | { "T":[9896, 711112301], "N":"core_repaint_req", "wo":1, 467 | "C": [ 468 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 469 | ] } 470 | { "T":[9896, 711161539], "N":"core_repaint_posted", "wo":1 } 471 | { "T":[9896, 721222757], "N":"core_repaint_finished", "wo":1 } 472 | { "T":[9896, 730386520], "N":"core_repaint_begin", "wo":1 } 473 | { "T":[9896, 733172196], "N":"core_repaint_req", "wo":1, 474 | "C": [ 475 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 476 | ] } 477 | { "T":[9896, 733223599], "N":"core_repaint_posted", "wo":1 } 478 | { "T":[9896, 743209460], "N":"core_repaint_finished", "wo":1 } 479 | { "T":[9896, 752361209], "N":"core_repaint_begin", "wo":1 } 480 | { "T":[9896, 753221580], "N":"core_repaint_req", "wo":1, 481 | "C": [ 482 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 483 | ] } 484 | { "T":[9896, 753265021], "N":"core_repaint_posted", "wo":1 } 485 | { "T":[9896, 763271834], "N":"core_repaint_finished", "wo":1 } 486 | { "T":[9896, 772428961], "N":"core_repaint_begin", "wo":1 } 487 | { "T":[9896, 773277180], "N":"core_repaint_req", "wo":1, 488 | "C": [ 489 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 490 | ] } 491 | { "T":[9896, 773319992], "N":"core_repaint_posted", "wo":1 } 492 | { "T":[9896, 783383516], "N":"core_repaint_finished", "wo":1 } 493 | { "T":[9896, 792540992], "N":"core_repaint_begin", "wo":1 } 494 | { "T":[9896, 793352684], "N":"core_repaint_req", "wo":1, 495 | "C": [ 496 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 497 | ] } 498 | { "T":[9896, 793394659], "N":"core_repaint_posted", "wo":1 } 499 | { "T":[9896, 803461465], "N":"core_repaint_finished", "wo":1 } 500 | { "T":[9896, 812566002], "N":"core_repaint_begin", "wo":1 } 501 | { "T":[9896, 813365751], "N":"core_repaint_req", "wo":1, 502 | "C": [ 503 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 504 | ] } 505 | { "T":[9896, 813407935], "N":"core_repaint_posted", "wo":1 } 506 | { "T":[9896, 823467687], "N":"core_repaint_finished", "wo":1 } 507 | { "T":[9896, 832552738], "N":"core_repaint_begin", "wo":1 } 508 | { "T":[9896, 833357725], "N":"core_repaint_req", "wo":1, 509 | "C": [ 510 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 511 | ] } 512 | { "T":[9896, 833396766], "N":"core_repaint_posted", "wo":1 } 513 | { "T":[9896, 843406093], "N":"core_repaint_finished", "wo":1 } 514 | { "T":[9896, 852537729], "N":"core_repaint_begin", "wo":1 } 515 | { "T":[9896, 853364855], "N":"core_repaint_req", "wo":1, 516 | "C": [ 517 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 518 | ] } 519 | { "T":[9896, 853407109], "N":"core_repaint_posted", "wo":1 } 520 | { "T":[9896, 863415877], "N":"core_repaint_finished", "wo":1 } 521 | { "T":[9896, 872539202], "N":"core_repaint_begin", "wo":1 } 522 | { "T":[9896, 873346982], "N":"core_repaint_req", "wo":1, 523 | "C": [ 524 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 525 | ] } 526 | { "T":[9896, 873389026], "N":"core_repaint_posted", "wo":1 } 527 | { "T":[9896, 883449756], "N":"core_repaint_finished", "wo":1 } 528 | { "T":[9896, 892551290], "N":"core_repaint_begin", "wo":1 } 529 | { "T":[9896, 893359909], "N":"core_repaint_req", "wo":1, 530 | "C": [ 531 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 532 | ] } 533 | { "T":[9896, 893401883], "N":"core_repaint_posted", "wo":1 } 534 | { "T":[9896, 903462194], "N":"core_repaint_finished", "wo":1 } 535 | { "T":[9896, 912566242], "N":"core_repaint_begin", "wo":1 } 536 | { "T":[9896, 913375979], "N":"core_repaint_req", "wo":1, 537 | "C": [ 538 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 539 | ] } 540 | { "T":[9896, 913417813], "N":"core_repaint_posted", "wo":1 } 541 | { "T":[9896, 923481337], "N":"core_repaint_finished", "wo":1 } 542 | { "T":[9896, 932584896], "N":"core_repaint_begin", "wo":1 } 543 | { "T":[9896, 933408391], "N":"core_repaint_req", "wo":1, 544 | "C": [ 545 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 546 | ] } 547 | { "T":[9896, 933449807], "N":"core_repaint_posted", "wo":1 } 548 | { "T":[9896, 943465838], "N":"core_repaint_finished", "wo":1 } 549 | { "T":[9896, 952563461], "N":"core_repaint_begin", "wo":1 } 550 | { "T":[9896, 953370055], "N":"core_repaint_req", "wo":1, 551 | "C": [ 552 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 553 | ] } 554 | { "T":[9896, 953412518], "N":"core_repaint_posted", "wo":1 } 555 | { "T":[9896, 963427432], "N":"core_repaint_finished", "wo":1 } 556 | { "T":[9896, 972534903], "N":"core_repaint_begin", "wo":1 } 557 | { "T":[9896, 973345547], "N":"core_repaint_req", "wo":1, 558 | "C": [ 559 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 560 | ] } 561 | { "T":[9896, 973387661], "N":"core_repaint_posted", "wo":1 } 562 | { "T":[9896, 983421432], "N":"core_repaint_finished", "wo":1 } 563 | { "T":[9896, 992539798], "N":"core_repaint_begin", "wo":1 } 564 | { "T":[9896, 993377261], "N":"core_repaint_req", "wo":1, 565 | "C": [ 566 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 567 | ] } 568 | { "T":[9896, 993420143], "N":"core_repaint_posted", "wo":1 } 569 | { "T":[9897, 3481781], "N":"core_repaint_finished", "wo":1 } 570 | { "T":[9897, 12588134], "N":"core_repaint_begin", "wo":1 } 571 | { "T":[9897, 13407089], "N":"core_repaint_req", "wo":1, 572 | "C": [ 573 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 574 | ] } 575 | { "T":[9897, 13449482], "N":"core_repaint_posted", "wo":1 } 576 | { "T":[9897, 23514333], "N":"core_repaint_finished", "wo":1 } 577 | { "T":[9897, 32628718], "N":"core_repaint_begin", "wo":1 } 578 | { "T":[9897, 33441876], "N":"core_repaint_req", "wo":1, 579 | "C": [ 580 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 581 | ] } 582 | { "T":[9897, 33483781], "N":"core_repaint_posted", "wo":1 } 583 | { "T":[9897, 43496390], "N":"core_repaint_finished", "wo":1 } 584 | { "T":[9897, 52604000], "N":"core_repaint_begin", "wo":1 } 585 | { "T":[9897, 53439577], "N":"core_repaint_req", "wo":1, 586 | "C": [ 587 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 588 | ] } 589 | { "T":[9897, 53481901], "N":"core_repaint_posted", "wo":1 } 590 | { "T":[9897, 63497304], "N":"core_repaint_finished", "wo":1 } 591 | { "T":[9897, 72601772], "N":"core_repaint_begin", "wo":1 } 592 | { "T":[9897, 73410390], "N":"core_repaint_req", "wo":1, 593 | "C": [ 594 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 595 | ] } 596 | { "T":[9897, 73452365], "N":"core_repaint_posted", "wo":1 } 597 | { "T":[9897, 83516167], "N":"core_repaint_finished", "wo":1 } 598 | { "T":[9897, 92635232], "N":"core_repaint_begin", "wo":1 } 599 | { "T":[9897, 93447691], "N":"core_repaint_req", "wo":1, 600 | "C": [ 601 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 602 | ] } 603 | { "T":[9897, 93489806], "N":"core_repaint_posted", "wo":1 } 604 | { "T":[9897, 103537335], "N":"core_repaint_finished", "wo":1 } 605 | { "T":[9897, 112661079], "N":"core_repaint_begin", "wo":1 } 606 | { "T":[9897, 113472631], "N":"core_repaint_req", "wo":1, 607 | "C": [ 608 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 609 | ] } 610 | { "T":[9897, 113514256], "N":"core_repaint_posted", "wo":1 } 611 | { "T":[9897, 123532732], "N":"core_repaint_finished", "wo":1 } 612 | { "T":[9897, 132649981], "N":"core_repaint_begin", "wo":1 } 613 | { "T":[9897, 133461393], "N":"core_repaint_req", "wo":1, 614 | "C": [ 615 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 616 | ] } 617 | { "T":[9897, 133503437], "N":"core_repaint_posted", "wo":1 } 618 | { "T":[9897, 143517164], "N":"core_repaint_finished", "wo":1 } 619 | { "T":[9897, 152641326], "N":"core_repaint_begin", "wo":1 } 620 | { "T":[9897, 153493386], "N":"core_repaint_req", "wo":1, 621 | "C": [ 622 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 623 | ] } 624 | { "T":[9897, 153537665], "N":"core_repaint_posted", "wo":1 } 625 | { "T":[9897, 163548948], "N":"core_repaint_finished", "wo":1 } 626 | { "T":[9897, 172707193], "N":"core_repaint_begin", "wo":1 } 627 | { "T":[9897, 173572802], "N":"core_repaint_req", "wo":1, 628 | "C": [ 629 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 630 | ] } 631 | { "T":[9897, 173617081], "N":"core_repaint_posted", "wo":1 } 632 | { "T":[9897, 183646103], "N":"core_repaint_finished", "wo":1 } 633 | { "T":[9897, 192806164], "N":"core_repaint_begin", "wo":1 } 634 | { "T":[9897, 193628052], "N":"core_repaint_req", "wo":1, 635 | "C": [ 636 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 637 | ] } 638 | { "T":[9897, 193670166], "N":"core_repaint_posted", "wo":1 } 639 | { "T":[9897, 203737880], "N":"core_repaint_finished", "wo":1 } 640 | { "T":[9897, 212900525], "N":"core_repaint_begin", "wo":1 } 641 | { "T":[9897, 214173656], "N":"core_repaint_req", "wo":1, 642 | "C": [ 643 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 644 | ] } 645 | { "T":[9897, 214224989], "N":"core_repaint_posted", "wo":1 } 646 | { "T":[9897, 224246259], "N":"core_repaint_finished", "wo":1 } 647 | { "T":[9897, 233367278], "N":"core_repaint_begin", "wo":1 } 648 | { "T":[9897, 233771937], "N":"core_repaint_req", "wo":1, 649 | "C": [ 650 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 651 | ] } 652 | { "T":[9897, 233787791], "N":"core_repaint_posted", "wo":1 } 653 | { "T":[9897, 243826451], "N":"core_repaint_finished", "wo":1 } 654 | { "T":[9897, 252986861], "N":"core_repaint_begin", "wo":1 } 655 | { "T":[9897, 253799740], "N":"core_repaint_req", "wo":1, 656 | "C": [ 657 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 658 | ] } 659 | { "T":[9897, 253842762], "N":"core_repaint_posted", "wo":1 } 660 | { "T":[9897, 263854882], "N":"core_repaint_finished", "wo":1 } 661 | { "T":[9897, 273023673], "N":"core_repaint_begin", "wo":1 } 662 | { "T":[9897, 273802190], "N":"core_repaint_req", "wo":1, 663 | "C": [ 664 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 665 | ] } 666 | { "T":[9897, 273844095], "N":"core_repaint_posted", "wo":1 } 667 | { "T":[9897, 283908876], "N":"core_repaint_finished", "wo":1 } 668 | { "T":[9897, 293062721], "N":"core_repaint_begin", "wo":1 } 669 | { "T":[9897, 293826920], "N":"core_repaint_req", "wo":1, 670 | "C": [ 671 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 672 | ] } 673 | { "T":[9897, 293868196], "N":"core_repaint_posted", "wo":1 } 674 | { "T":[9897, 303929695], "N":"core_repaint_finished", "wo":1 } 675 | { "T":[9897, 313080397], "N":"core_repaint_begin", "wo":1 } 676 | { "T":[9897, 313848438], "N":"core_repaint_req", "wo":1, 677 | "C": [ 678 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 679 | ] } 680 | { "T":[9897, 313890063], "N":"core_repaint_posted", "wo":1 } 681 | { "T":[9897, 323950932], "N":"core_repaint_finished", "wo":1 } 682 | { "T":[9897, 333108479], "N":"core_repaint_begin", "wo":1 } 683 | { "T":[9897, 333876729], "N":"core_repaint_req", "wo":1, 684 | "C": [ 685 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 686 | ] } 687 | { "T":[9897, 333918564], "N":"core_repaint_posted", "wo":1 } 688 | { "T":[9897, 343925167], "N":"core_repaint_finished", "wo":1 } 689 | { "T":[9897, 353074822], "N":"core_repaint_begin", "wo":1 } 690 | { "T":[9897, 353831409], "N":"core_repaint_req", "wo":1, 691 | "C": [ 692 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 693 | ] } 694 | { "T":[9897, 353872615], "N":"core_repaint_posted", "wo":1 } 695 | { "T":[9897, 363883967], "N":"core_repaint_finished", "wo":1 } 696 | { "T":[9897, 373040187], "N":"core_repaint_begin", "wo":1 } 697 | { "T":[9897, 373808647], "N":"core_repaint_req", "wo":1, 698 | "C": [ 699 | { "f":"weston_view_schedule_repaint", "l":1187, "ws":4 } 700 | ] } 701 | { "T":[9897, 373851180], "N":"core_repaint_posted", "wo":1 } 702 | { "T":[9897, 383917916], "N":"core_repaint_finished", "wo":1 } 703 | { "T":[9897, 393072669], "N":"core_repaint_begin", "wo":1 } 704 | { "T":[9897, 393838266], "N":"core_repaint_posted", "wo":1 } 705 | { "T":[9897, 403944602], "N":"core_repaint_finished", "wo":1 } 706 | { "T":[9897, 413098447], "N":"core_repaint_exit_loop", "wo":1 } 707 | -------------------------------------------------------------------------------- /testdata/timeline-presentation-f.log: -------------------------------------------------------------------------------- 1 | { "id":7, "type":"weston_output", "name":"LVDS1" } 2 | { "T":[4507001, 220075424], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 220140000] } 3 | { "T":[4507001, 220215734], "N":"core_repaint_begin", "wo":7 } 4 | { "id":8, "type":"weston_surface", "desc":"top-level window 'presentation-shm'" } 5 | { "T":[4507001, 220483382], "N":"core_flush_damage", "ws":8, "wo":7 } 6 | { "T":[4507001, 220834989], "N":"core_repaint_posted", "wo":7 } 7 | { "id":8, "type":"weston_surface", "desc":"top-level window 'presentation-shm'" } 8 | { "T":[4507001, 221213305], "N":"core_commit_damage", "ws":8 } 9 | { "T":[4507001, 221276041], "N":"core_repaint_req", "wo":7, 10 | "C": [ 11 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 12 | ] } 13 | { "T":[4507001, 236684664], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 236793000] } 14 | { "T":[4507001, 236777998], "N":"core_repaint_begin", "wo":7 } 15 | { "T":[4507001, 237057633], "N":"core_flush_damage", "ws":8, "wo":7 } 16 | { "T":[4507001, 237396972], "N":"core_repaint_posted", "wo":7 } 17 | { "T":[4507001, 237739141], "N":"core_commit_damage", "ws":8 } 18 | { "T":[4507001, 237796197], "N":"core_repaint_req", "wo":7, 19 | "C": [ 20 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 21 | ] } 22 | { "T":[4507001, 253382056], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 253441000] } 23 | { "T":[4507001, 253503504], "N":"core_repaint_begin", "wo":7 } 24 | { "T":[4507001, 253770791], "N":"core_flush_damage", "ws":8, "wo":7 } 25 | { "T":[4507001, 254168637], "N":"core_repaint_posted", "wo":7 } 26 | { "T":[4507001, 254520307], "N":"core_commit_damage", "ws":8 } 27 | { "T":[4507001, 254577445], "N":"core_repaint_req", "wo":7, 28 | "C": [ 29 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 30 | ] } 31 | { "T":[4507001, 270064242], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 270090000] } 32 | { "T":[4507001, 270186585], "N":"core_repaint_begin", "wo":7 } 33 | { "T":[4507001, 270454824], "N":"core_flush_damage", "ws":8, "wo":7 } 34 | { "T":[4507001, 270805726], "N":"core_repaint_posted", "wo":7 } 35 | { "T":[4507001, 271178942], "N":"core_commit_damage", "ws":8 } 36 | { "T":[4507001, 271236379], "N":"core_repaint_req", "wo":7, 37 | "C": [ 38 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 39 | ] } 40 | { "T":[4507001, 286679703], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 286740000] } 41 | { "T":[4507001, 286802119], "N":"core_repaint_begin", "wo":7 } 42 | { "T":[4507001, 287112818], "N":"core_flush_damage", "ws":8, "wo":7 } 43 | { "T":[4507001, 287457708], "N":"core_repaint_posted", "wo":7 } 44 | { "T":[4507001, 287805850], "N":"core_commit_damage", "ws":8 } 45 | { "T":[4507001, 287862746], "N":"core_repaint_req", "wo":7, 46 | "C": [ 47 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 48 | ] } 49 | { "T":[4507001, 303330585], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 303391000] } 50 | { "T":[4507001, 303452121], "N":"core_repaint_begin", "wo":7 } 51 | { "T":[4507001, 303719002], "N":"core_flush_damage", "ws":8, "wo":7 } 52 | { "T":[4507001, 304112190], "N":"core_repaint_posted", "wo":7 } 53 | { "T":[4507001, 304466511], "N":"core_commit_damage", "ws":8 } 54 | { "T":[4507001, 304524826], "N":"core_repaint_req", "wo":7, 55 | "C": [ 56 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 57 | ] } 58 | { "T":[4507001, 319980893], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 320040000] } 59 | { "T":[4507001, 320138589], "N":"core_repaint_begin", "wo":7 } 60 | { "T":[4507001, 320403796], "N":"core_flush_damage", "ws":8, "wo":7 } 61 | { "T":[4507001, 320749386], "N":"core_repaint_posted", "wo":7 } 62 | { "T":[4507001, 321098131], "N":"core_commit_damage", "ws":8 } 63 | { "T":[4507001, 321155408], "N":"core_repaint_req", "wo":7, 64 | "C": [ 65 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 66 | ] } 67 | { "T":[4507001, 336630557], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 336691000] } 68 | { "T":[4507001, 336750915], "N":"core_repaint_begin", "wo":7 } 69 | { "T":[4507001, 337064987], "N":"core_flush_damage", "ws":8, "wo":7 } 70 | { "T":[4507001, 337409814], "N":"core_repaint_posted", "wo":7 } 71 | { "T":[4507001, 337722457], "N":"core_commit_damage", "ws":8 } 72 | { "T":[4507001, 337780286], "N":"core_repaint_req", "wo":7, 73 | "C": [ 74 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 75 | ] } 76 | { "T":[4507001, 353281090], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 353342000] } 77 | { "T":[4507001, 353404418], "N":"core_repaint_begin", "wo":7 } 78 | { "T":[4507001, 353675193], "N":"core_flush_damage", "ws":8, "wo":7 } 79 | { "T":[4507001, 354064109], "N":"core_repaint_posted", "wo":7 } 80 | { "T":[4507001, 354432965], "N":"core_commit_damage", "ws":8 } 81 | { "T":[4507001, 354490037], "N":"core_repaint_req", "wo":7, 82 | "C": [ 83 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 84 | ] } 85 | { "T":[4507001, 369922095], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 369991000] } 86 | { "T":[4507001, 370077693], "N":"core_repaint_begin", "wo":7 } 87 | { "T":[4507001, 370347685], "N":"core_flush_damage", "ws":8, "wo":7 } 88 | { "T":[4507001, 370696609], "N":"core_repaint_posted", "wo":7 } 89 | { "T":[4507001, 371064084], "N":"core_commit_damage", "ws":8 } 90 | { "T":[4507001, 371121447], "N":"core_repaint_req", "wo":7, 91 | "C": [ 92 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 93 | ] } 94 | { "T":[4507001, 386580196], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 386642000] } 95 | { "T":[4507001, 386702456], "N":"core_repaint_begin", "wo":7 } 96 | { "T":[4507001, 386971753], "N":"core_flush_damage", "ws":8, "wo":7 } 97 | { "T":[4507001, 387362512], "N":"core_repaint_posted", "wo":7 } 98 | { "T":[4507001, 387708444], "N":"core_commit_damage", "ws":8 } 99 | { "T":[4507001, 387765130], "N":"core_repaint_req", "wo":7, 100 | "C": [ 101 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 102 | ] } 103 | { "T":[4507001, 403229745], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 403292000] } 104 | { "T":[4507001, 403345498], "N":"core_repaint_begin", "wo":7 } 105 | { "T":[4507001, 403602316], "N":"core_flush_damage", "ws":8, "wo":7 } 106 | { "T":[4507001, 403930061], "N":"core_repaint_posted", "wo":7 } 107 | { "T":[4507001, 404280113], "N":"core_commit_damage", "ws":8 } 108 | { "T":[4507001, 404338077], "N":"core_repaint_req", "wo":7, 109 | "C": [ 110 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 111 | ] } 112 | { "T":[4507001, 419870877], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 419940000] } 113 | { "T":[4507001, 419991829], "N":"core_repaint_begin", "wo":7 } 114 | { "T":[4507001, 420306184], "N":"core_flush_damage", "ws":8, "wo":7 } 115 | { "T":[4507001, 420654089], "N":"core_repaint_posted", "wo":7 } 116 | { "T":[4507001, 421017043], "N":"core_commit_damage", "ws":8 } 117 | { "T":[4507001, 421073649], "N":"core_repaint_req", "wo":7, 118 | "C": [ 119 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 120 | ] } 121 | { "T":[4507001, 436527473], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 436594000] } 122 | { "T":[4507001, 436639860], "N":"core_repaint_begin", "wo":7 } 123 | { "T":[4507001, 436916971], "N":"core_flush_damage", "ws":8, "wo":7 } 124 | { "T":[4507001, 437309329], "N":"core_repaint_posted", "wo":7 } 125 | { "T":[4507001, 437664315], "N":"core_commit_damage", "ws":8 } 126 | { "T":[4507001, 437722284], "N":"core_repaint_req", "wo":7, 127 | "C": [ 128 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 129 | ] } 130 | { "T":[4507001, 453179820], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 453242000] } 131 | { "T":[4507001, 453302541], "N":"core_repaint_begin", "wo":7 } 132 | { "T":[4507001, 453570446], "N":"core_flush_damage", "ws":8, "wo":7 } 133 | { "T":[4507001, 453915764], "N":"core_repaint_posted", "wo":7 } 134 | { "T":[4507001, 454269048], "N":"core_commit_damage", "ws":8 } 135 | { "T":[4507001, 454326049], "N":"core_repaint_req", "wo":7, 136 | "C": [ 137 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 138 | ] } 139 | { "T":[4507001, 469831745], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 469892000] } 140 | { "T":[4507001, 469953208], "N":"core_repaint_begin", "wo":7 } 141 | { "T":[4507001, 470266490], "N":"core_flush_damage", "ws":8, "wo":7 } 142 | { "T":[4507001, 470614290], "N":"core_repaint_posted", "wo":7 } 143 | { "T":[4507001, 470959220], "N":"core_commit_damage", "ws":8 } 144 | { "T":[4507001, 471033228], "N":"core_repaint_req", "wo":7, 145 | "C": [ 146 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 147 | ] } 148 | { "T":[4507001, 486475363], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 486541000] } 149 | { "T":[4507001, 486598003], "N":"core_repaint_begin", "wo":7 } 150 | { "T":[4507001, 486931671], "N":"core_flush_damage", "ws":8, "wo":7 } 151 | { "T":[4507001, 487325228], "N":"core_repaint_posted", "wo":7 } 152 | { "T":[4507001, 487681916], "N":"core_commit_damage", "ws":8 } 153 | { "T":[4507001, 487738661], "N":"core_repaint_req", "wo":7, 154 | "C": [ 155 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 156 | ] } 157 | { "T":[4507001, 503133682], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 503194000] } 158 | { "T":[4507001, 503254102], "N":"core_repaint_begin", "wo":7 } 159 | { "T":[4507001, 503521836], "N":"core_flush_damage", "ws":8, "wo":7 } 160 | { "T":[4507001, 503865208], "N":"core_repaint_posted", "wo":7 } 161 | { "T":[4507001, 504259818], "N":"core_commit_damage", "ws":8 } 162 | { "T":[4507001, 504317397], "N":"core_repaint_req", "wo":7, 163 | "C": [ 164 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 165 | ] } 166 | { "T":[4507001, 519701289], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 519843000] } 167 | { "T":[4507001, 519797608], "N":"core_repaint_begin", "wo":7 } 168 | { "T":[4507001, 520101939], "N":"core_flush_damage", "ws":8, "wo":7 } 169 | { "T":[4507001, 520441184], "N":"core_repaint_posted", "wo":7 } 170 | { "T":[4507001, 520783554], "N":"core_commit_damage", "ws":8 } 171 | { "T":[4507001, 520840008], "N":"core_repaint_req", "wo":7, 172 | "C": [ 173 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 174 | ] } 175 | { "T":[4507001, 536426284], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 536490000] } 176 | { "T":[4507001, 536549217], "N":"core_repaint_begin", "wo":7 } 177 | { "T":[4507001, 536816488], "N":"core_flush_damage", "ws":8, "wo":7 } 178 | { "T":[4507001, 537211267], "N":"core_repaint_posted", "wo":7 } 179 | { "T":[4507001, 537555314], "N":"core_commit_damage", "ws":8 } 180 | { "T":[4507001, 537626778], "N":"core_repaint_req", "wo":7, 181 | "C": [ 182 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 183 | ] } 184 | { "T":[4507001, 553073076], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 553141000] } 185 | { "T":[4507001, 553187891], "N":"core_repaint_begin", "wo":7 } 186 | { "T":[4507001, 553461424], "N":"core_flush_damage", "ws":8, "wo":7 } 187 | { "T":[4507001, 553811582], "N":"core_repaint_posted", "wo":7 } 188 | { "T":[4507001, 554195770], "N":"core_commit_damage", "ws":8 } 189 | { "T":[4507001, 554254572], "N":"core_repaint_req", "wo":7, 190 | "C": [ 191 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 192 | ] } 193 | { "T":[4507001, 569729742], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 569794000] } 194 | { "T":[4507001, 569843209], "N":"core_repaint_begin", "wo":7 } 195 | { "T":[4507001, 570146012], "N":"core_flush_damage", "ws":8, "wo":7 } 196 | { "T":[4507001, 570476907], "N":"core_repaint_posted", "wo":7 } 197 | { "T":[4507001, 570828334], "N":"core_commit_damage", "ws":8 } 198 | { "T":[4507001, 570885351], "N":"core_repaint_req", "wo":7, 199 | "C": [ 200 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 201 | ] } 202 | { "T":[4507001, 586372634], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 586441000] } 203 | { "T":[4507001, 586491466], "N":"core_repaint_begin", "wo":7 } 204 | { "T":[4507001, 586764320], "N":"core_flush_damage", "ws":8, "wo":7 } 205 | { "T":[4507001, 587159959], "N":"core_repaint_posted", "wo":7 } 206 | { "T":[4507001, 587508283], "N":"core_commit_damage", "ws":8 } 207 | { "T":[4507001, 587564998], "N":"core_repaint_req", "wo":7, 208 | "C": [ 209 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 210 | ] } 211 | { "T":[4507001, 603066738], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 603093000] } 212 | { "T":[4507001, 603188788], "N":"core_repaint_begin", "wo":7 } 213 | { "T":[4507001, 603456501], "N":"core_flush_damage", "ws":8, "wo":7 } 214 | { "T":[4507001, 603801151], "N":"core_repaint_posted", "wo":7 } 215 | { "T":[4507001, 604197115], "N":"core_commit_damage", "ws":8 } 216 | { "T":[4507001, 604254197], "N":"core_repaint_req", "wo":7, 217 | "C": [ 218 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 219 | ] } 220 | { "T":[4507001, 619639322], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 619732000] } 221 | { "T":[4507001, 619728664], "N":"core_repaint_begin", "wo":7 } 222 | { "T":[4507001, 619982874], "N":"core_flush_damage", "ws":8, "wo":7 } 223 | { "T":[4507001, 620350050], "N":"core_repaint_posted", "wo":7 } 224 | { "T":[4507001, 620789732], "N":"core_commit_damage", "ws":8 } 225 | { "T":[4507001, 620847902], "N":"core_repaint_req", "wo":7, 226 | "C": [ 227 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 228 | ] } 229 | { "T":[4507001, 636323245], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 636391000] } 230 | { "T":[4507001, 636443648], "N":"core_repaint_begin", "wo":7 } 231 | { "T":[4507001, 636721376], "N":"core_flush_damage", "ws":8, "wo":7 } 232 | { "T":[4507001, 637123090], "N":"core_repaint_posted", "wo":7 } 233 | { "T":[4507001, 637473701], "N":"core_commit_damage", "ws":8 } 234 | { "T":[4507001, 637532939], "N":"core_repaint_req", "wo":7, 235 | "C": [ 236 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 237 | ] } 238 | { "T":[4507001, 652977041], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 653042000] } 239 | { "T":[4507001, 653146986], "N":"core_repaint_begin", "wo":7 } 240 | { "T":[4507001, 653414511], "N":"core_flush_damage", "ws":8, "wo":7 } 241 | { "T":[4507001, 653760712], "N":"core_repaint_posted", "wo":7 } 242 | { "T":[4507001, 654109096], "N":"core_commit_damage", "ws":8 } 243 | { "T":[4507001, 654166318], "N":"core_repaint_req", "wo":7, 244 | "C": [ 245 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 246 | ] } 247 | { "T":[4507001, 669633353], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 669695000] } 248 | { "T":[4507001, 669755623], "N":"core_repaint_begin", "wo":7 } 249 | { "T":[4507001, 670069349], "N":"core_flush_damage", "ws":8, "wo":7 } 250 | { "T":[4507001, 670418581], "N":"core_repaint_posted", "wo":7 } 251 | { "T":[4507001, 670771280], "N":"core_commit_damage", "ws":8 } 252 | { "T":[4507001, 670829164], "N":"core_repaint_req", "wo":7, 253 | "C": [ 254 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 255 | ] } 256 | { "T":[4507001, 686275789], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 686344000] } 257 | { "T":[4507001, 686389626], "N":"core_repaint_begin", "wo":7 } 258 | { "T":[4507001, 686656903], "N":"core_flush_damage", "ws":8, "wo":7 } 259 | { "T":[4507001, 687029930], "N":"core_repaint_posted", "wo":7 } 260 | { "T":[4507001, 687386264], "N":"core_commit_damage", "ws":8 } 261 | { "T":[4507001, 687443445], "N":"core_repaint_req", "wo":7, 262 | "C": [ 263 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 264 | ] } 265 | { "T":[4507001, 702933700], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 702994000] } 266 | { "T":[4507001, 703097783], "N":"core_repaint_begin", "wo":7 } 267 | { "T":[4507001, 703359442], "N":"core_flush_damage", "ws":8, "wo":7 } 268 | { "T":[4507001, 703704303], "N":"core_repaint_posted", "wo":7 } 269 | { "T":[4507001, 704070334], "N":"core_commit_damage", "ws":8 } 270 | { "T":[4507001, 704126820], "N":"core_repaint_req", "wo":7, 271 | "C": [ 272 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 273 | ] } 274 | { "T":[4507001, 719579577], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 719643000] } 275 | { "T":[4507001, 719704515], "N":"core_repaint_begin", "wo":7 } 276 | { "T":[4507001, 719967143], "N":"core_flush_damage", "ws":8, "wo":7 } 277 | { "T":[4507001, 720342941], "N":"core_repaint_posted", "wo":7 } 278 | { "T":[4507001, 720693135], "N":"core_commit_damage", "ws":8 } 279 | { "T":[4507001, 720749409], "N":"core_repaint_req", "wo":7, 280 | "C": [ 281 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 282 | ] } 283 | { "T":[4507001, 736222785], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 736292000] } 284 | { "T":[4507001, 736336146], "N":"core_repaint_begin", "wo":7 } 285 | { "T":[4507001, 736601056], "N":"core_flush_damage", "ws":8, "wo":7 } 286 | { "T":[4507001, 736948832], "N":"core_repaint_posted", "wo":7 } 287 | { "T":[4507001, 737300069], "N":"core_commit_damage", "ws":8 } 288 | { "T":[4507001, 737357396], "N":"core_repaint_req", "wo":7, 289 | "C": [ 290 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 291 | ] } 292 | { "T":[4507001, 752886810], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 752948000] } 293 | { "T":[4507001, 753050807], "N":"core_repaint_begin", "wo":7 } 294 | { "T":[4507001, 753323736], "N":"core_flush_damage", "ws":8, "wo":7 } 295 | { "T":[4507001, 753669659], "N":"core_repaint_posted", "wo":7 } 296 | { "T":[4507001, 754032487], "N":"core_commit_damage", "ws":8 } 297 | { "T":[4507001, 754089373], "N":"core_repaint_req", "wo":7, 298 | "C": [ 299 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 300 | ] } 301 | { "T":[4507001, 769532213], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 769594000] } 302 | { "T":[4507001, 769653870], "N":"core_repaint_begin", "wo":7 } 303 | { "T":[4507001, 769920671], "N":"core_flush_damage", "ws":8, "wo":7 } 304 | { "T":[4507001, 770311045], "N":"core_repaint_posted", "wo":7 } 305 | { "T":[4507001, 770657214], "N":"core_commit_damage", "ws":8 } 306 | { "T":[4507001, 770714978], "N":"core_repaint_req", "wo":7, 307 | "C": [ 308 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 309 | ] } 310 | { "T":[4507001, 786172707], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 786243000] } 311 | { "T":[4507001, 786288385], "N":"core_repaint_begin", "wo":7 } 312 | { "T":[4507001, 786560911], "N":"core_flush_damage", "ws":8, "wo":7 } 313 | { "T":[4507001, 786911944], "N":"core_repaint_posted", "wo":7 } 314 | { "T":[4507001, 787263193], "N":"core_commit_damage", "ws":8 } 315 | { "T":[4507001, 787319843], "N":"core_repaint_req", "wo":7, 316 | "C": [ 317 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 318 | ] } 319 | { "T":[4507001, 802833267], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 802895000] } 320 | { "T":[4507001, 802955998], "N":"core_repaint_begin", "wo":7 } 321 | { "T":[4507001, 803270911], "N":"core_flush_damage", "ws":8, "wo":7 } 322 | { "T":[4507001, 803618761], "N":"core_repaint_posted", "wo":7 } 323 | { "T":[4507001, 803967339], "N":"core_commit_damage", "ws":8 } 324 | { "T":[4507001, 804042845], "N":"core_repaint_req", "wo":7, 325 | "C": [ 326 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 327 | ] } 328 | { "T":[4507001, 819475585], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 819541000] } 329 | { "T":[4507001, 819600097], "N":"core_repaint_begin", "wo":7 } 330 | { "T":[4507001, 819874393], "N":"core_flush_damage", "ws":8, "wo":7 } 331 | { "T":[4507001, 820268034], "N":"core_repaint_posted", "wo":7 } 332 | { "T":[4507001, 820620530], "N":"core_commit_damage", "ws":8 } 333 | { "T":[4507001, 820677687], "N":"core_repaint_req", "wo":7, 334 | "C": [ 335 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 336 | ] } 337 | { "T":[4507001, 836135830], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 836196000] } 338 | { "T":[4507001, 836257003], "N":"core_repaint_begin", "wo":7 } 339 | { "T":[4507001, 836523967], "N":"core_flush_damage", "ws":8, "wo":7 } 340 | { "T":[4507001, 836868125], "N":"core_repaint_posted", "wo":7 } 341 | { "T":[4507001, 837298586], "N":"core_commit_damage", "ws":8 } 342 | { "T":[4507001, 837356059], "N":"core_repaint_req", "wo":7, 343 | "C": [ 344 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 345 | ] } 346 | { "T":[4507001, 852780054], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 852846000] } 347 | { "T":[4507001, 852898912], "N":"core_repaint_begin", "wo":7 } 348 | { "T":[4507001, 853212189], "N":"core_flush_damage", "ws":8, "wo":7 } 349 | { "T":[4507001, 853562602], "N":"core_repaint_posted", "wo":7 } 350 | { "T":[4507001, 853915474], "N":"core_commit_damage", "ws":8 } 351 | { "T":[4507001, 853974135], "N":"core_repaint_req", "wo":7, 352 | "C": [ 353 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 354 | ] } 355 | { "T":[4507001, 869434276], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 869496000] } 356 | { "T":[4507001, 869554058], "N":"core_repaint_begin", "wo":7 } 357 | { "T":[4507001, 869821012], "N":"core_flush_damage", "ws":8, "wo":7 } 358 | { "T":[4507001, 870216402], "N":"core_repaint_posted", "wo":7 } 359 | { "T":[4507001, 870571611], "N":"core_commit_damage", "ws":8 } 360 | { "T":[4507001, 870628984], "N":"core_repaint_req", "wo":7, 361 | "C": [ 362 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 363 | ] } 364 | { "T":[4507001, 886085511], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 886146000] } 365 | { "T":[4507001, 886208332], "N":"core_repaint_begin", "wo":7 } 366 | { "T":[4507001, 886474987], "N":"core_flush_damage", "ws":8, "wo":7 } 367 | { "T":[4507001, 886817986], "N":"core_repaint_posted", "wo":7 } 368 | { "T":[4507001, 887214067], "N":"core_commit_damage", "ws":8 } 369 | { "T":[4507001, 887271189], "N":"core_repaint_req", "wo":7, 370 | "C": [ 371 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 372 | ] } 373 | { "T":[4507001, 902694773], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 902785000] } 374 | { "T":[4507001, 902835127], "N":"core_repaint_begin", "wo":7 } 375 | { "T":[4507001, 903135491], "N":"core_flush_damage", "ws":8, "wo":7 } 376 | { "T":[4507001, 903345881], "N":"core_repaint_posted", "wo":7 } 377 | { "T":[4507001, 903665420], "N":"core_commit_damage", "ws":8 } 378 | { "T":[4507001, 903701775], "N":"core_repaint_req", "wo":7, 379 | "C": [ 380 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 381 | ] } 382 | { "T":[4507001, 919372979], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 919446000] } 383 | { "T":[4507001, 919445611], "N":"core_repaint_begin", "wo":7 } 384 | { "T":[4507001, 919611450], "N":"core_flush_damage", "ws":8, "wo":7 } 385 | { "T":[4507001, 919817082], "N":"core_repaint_posted", "wo":7 } 386 | { "T":[4507001, 920153237], "N":"core_commit_damage", "ws":8 } 387 | { "T":[4507001, 920186709], "N":"core_repaint_req", "wo":7, 388 | "C": [ 389 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 390 | ] } 391 | { "T":[4507001, 936073216], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 936097000] } 392 | { "T":[4507001, 936194537], "N":"core_repaint_begin", "wo":7 } 393 | { "T":[4507001, 936460645], "N":"core_flush_damage", "ws":8, "wo":7 } 394 | { "T":[4507001, 936805902], "N":"core_repaint_posted", "wo":7 } 395 | { "T":[4507001, 937192549], "N":"core_commit_damage", "ws":8 } 396 | { "T":[4507001, 937249881], "N":"core_repaint_req", "wo":7, 397 | "C": [ 398 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 399 | ] } 400 | { "T":[4507001, 952678509], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 952745000] } 401 | { "T":[4507001, 952800448], "N":"core_repaint_begin", "wo":7 } 402 | { "T":[4507001, 953115596], "N":"core_flush_damage", "ws":8, "wo":7 } 403 | { "T":[4507001, 953464739], "N":"core_repaint_posted", "wo":7 } 404 | { "T":[4507001, 953813115], "N":"core_commit_damage", "ws":8 } 405 | { "T":[4507001, 953869831], "N":"core_repaint_req", "wo":7, 406 | "C": [ 407 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 408 | ] } 409 | { "T":[4507001, 969335531], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 969397000] } 410 | { "T":[4507001, 969456565], "N":"core_repaint_begin", "wo":7 } 411 | { "T":[4507001, 969724763], "N":"core_flush_damage", "ws":8, "wo":7 } 412 | { "T":[4507001, 970118090], "N":"core_repaint_posted", "wo":7 } 413 | { "T":[4507001, 970469740], "N":"core_commit_damage", "ws":8 } 414 | { "T":[4507001, 970527398], "N":"core_repaint_req", "wo":7, 415 | "C": [ 416 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 417 | ] } 418 | { "T":[4507001, 985975313], "N":"core_repaint_finished", "wo":7, "vblank":[4507001, 986044000] } 419 | { "T":[4507001, 986136883], "N":"core_repaint_begin", "wo":7 } 420 | { "T":[4507001, 986405949], "N":"core_flush_damage", "ws":8, "wo":7 } 421 | { "T":[4507001, 986751637], "N":"core_repaint_posted", "wo":7 } 422 | { "T":[4507001, 987106378], "N":"core_commit_damage", "ws":8 } 423 | { "T":[4507001, 987163194], "N":"core_repaint_req", "wo":7, 424 | "C": [ 425 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 426 | ] } 427 | { "T":[4507002, 2632107], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 2697000] } 428 | { "T":[4507002, 2754272], "N":"core_repaint_begin", "wo":7 } 429 | { "T":[4507002, 3068418], "N":"core_flush_damage", "ws":8, "wo":7 } 430 | { "T":[4507002, 3415869], "N":"core_repaint_posted", "wo":7 } 431 | { "T":[4507002, 3761899], "N":"core_commit_damage", "ws":8 } 432 | { "T":[4507002, 3818735], "N":"core_repaint_req", "wo":7, 433 | "C": [ 434 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 435 | ] } 436 | { "T":[4507002, 19286785], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 19347000] } 437 | { "T":[4507002, 19409963], "N":"core_repaint_begin", "wo":7 } 438 | { "T":[4507002, 19677388], "N":"core_flush_damage", "ws":8, "wo":7 } 439 | { "T":[4507002, 20068347], "N":"core_repaint_posted", "wo":7 } 440 | { "T":[4507002, 20433601], "N":"core_commit_damage", "ws":8 } 441 | { "T":[4507002, 20491124], "N":"core_repaint_req", "wo":7, 442 | "C": [ 443 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 444 | ] } 445 | { "T":[4507002, 35938026], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 35999000] } 446 | { "T":[4507002, 36090128], "N":"core_repaint_begin", "wo":7 } 447 | { "T":[4507002, 36348648], "N":"core_flush_damage", "ws":8, "wo":7 } 448 | { "T":[4507002, 36672657], "N":"core_repaint_posted", "wo":7 } 449 | { "T":[4507002, 37099692], "N":"core_commit_damage", "ws":8 } 450 | { "T":[4507002, 37158254], "N":"core_repaint_req", "wo":7, 451 | "C": [ 452 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 453 | ] } 454 | { "T":[4507002, 52585642], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 52647000] } 455 | { "T":[4507002, 52707199], "N":"core_repaint_begin", "wo":7 } 456 | { "T":[4507002, 52975431], "N":"core_flush_damage", "ws":8, "wo":7 } 457 | { "T":[4507002, 53367618], "N":"core_repaint_posted", "wo":7 } 458 | { "T":[4507002, 53716960], "N":"core_commit_damage", "ws":8 } 459 | { "T":[4507002, 53773866], "N":"core_repaint_req", "wo":7, 460 | "C": [ 461 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 462 | ] } 463 | { "T":[4507002, 69197912], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 69300000] } 464 | { "T":[4507002, 69310159], "N":"core_repaint_begin", "wo":7 } 465 | { "T":[4507002, 69577949], "N":"core_flush_damage", "ws":8, "wo":7 } 466 | { "T":[4507002, 69913812], "N":"core_repaint_posted", "wo":7 } 467 | { "T":[4507002, 70263841], "N":"core_commit_damage", "ws":8 } 468 | { "T":[4507002, 70321053], "N":"core_repaint_req", "wo":7, 469 | "C": [ 470 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 471 | ] } 472 | { "T":[4507002, 85878498], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 85945000] } 473 | { "T":[4507002, 86046110], "N":"core_repaint_begin", "wo":7 } 474 | { "T":[4507002, 86321135], "N":"core_flush_damage", "ws":8, "wo":7 } 475 | { "T":[4507002, 86667096], "N":"core_repaint_posted", "wo":7 } 476 | { "T":[4507002, 87035305], "N":"core_commit_damage", "ws":8 } 477 | { "T":[4507002, 87092617], "N":"core_repaint_req", "wo":7, 478 | "C": [ 479 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 480 | ] } 481 | { "T":[4507002, 102525230], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 102597000] } 482 | { "T":[4507002, 102643371], "N":"core_repaint_begin", "wo":7 } 483 | { "T":[4507002, 102914673], "N":"core_flush_damage", "ws":8, "wo":7 } 484 | { "T":[4507002, 103309865], "N":"core_repaint_posted", "wo":7 } 485 | { "T":[4507002, 103658956], "N":"core_commit_damage", "ws":8 } 486 | { "T":[4507002, 103716690], "N":"core_repaint_req", "wo":7, 487 | "C": [ 488 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 489 | ] } 490 | { "T":[4507002, 119187097], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 119249000] } 491 | { "T":[4507002, 119309196], "N":"core_repaint_begin", "wo":7 } 492 | { "T":[4507002, 119579345], "N":"core_flush_damage", "ws":8, "wo":7 } 493 | { "T":[4507002, 119927548], "N":"core_repaint_posted", "wo":7 } 494 | { "T":[4507002, 120281003], "N":"core_commit_damage", "ws":8 } 495 | { "T":[4507002, 120338501], "N":"core_repaint_req", "wo":7, 496 | "C": [ 497 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 498 | ] } 499 | { "T":[4507002, 135833870], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 135896000] } 500 | { "T":[4507002, 135950251], "N":"core_repaint_begin", "wo":7 } 501 | { "T":[4507002, 136248442], "N":"core_flush_damage", "ws":8, "wo":7 } 502 | { "T":[4507002, 136584315], "N":"core_repaint_posted", "wo":7 } 503 | { "T":[4507002, 136928260], "N":"core_commit_damage", "ws":8 } 504 | { "T":[4507002, 136986190], "N":"core_repaint_req", "wo":7, 505 | "C": [ 506 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 507 | ] } 508 | { "T":[4507002, 152485056], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 152548000] } 509 | { "T":[4507002, 152608971], "N":"core_repaint_begin", "wo":7 } 510 | { "T":[4507002, 152876736], "N":"core_flush_damage", "ws":8, "wo":7 } 511 | { "T":[4507002, 153273417], "N":"core_repaint_posted", "wo":7 } 512 | { "T":[4507002, 153625608], "N":"core_commit_damage", "ws":8 } 513 | { "T":[4507002, 153682499], "N":"core_repaint_req", "wo":7, 514 | "C": [ 515 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 516 | ] } 517 | { "T":[4507002, 169134424], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 169197000] } 518 | { "T":[4507002, 169250810], "N":"core_repaint_begin", "wo":7 } 519 | { "T":[4507002, 169509045], "N":"core_flush_damage", "ws":8, "wo":7 } 520 | { "T":[4507002, 169838458], "N":"core_repaint_posted", "wo":7 } 521 | { "T":[4507002, 170239079], "N":"core_commit_damage", "ws":8 } 522 | { "T":[4507002, 170296146], "N":"core_repaint_req", "wo":7, 523 | "C": [ 524 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 525 | ] } 526 | { "T":[4507002, 185784734], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 185845000] } 527 | { "T":[4507002, 185907725], "N":"core_repaint_begin", "wo":7 } 528 | { "T":[4507002, 186220294], "N":"core_flush_damage", "ws":8, "wo":7 } 529 | { "T":[4507002, 186568278], "N":"core_repaint_posted", "wo":7 } 530 | { "T":[4507002, 186912279], "N":"core_commit_damage", "ws":8 } 531 | { "T":[4507002, 186969094], "N":"core_repaint_req", "wo":7, 532 | "C": [ 533 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 534 | ] } 535 | { "T":[4507002, 202437428], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 202498000] } 536 | { "T":[4507002, 202557721], "N":"core_repaint_begin", "wo":7 } 537 | { "T":[4507002, 202827542], "N":"core_flush_damage", "ws":8, "wo":7 } 538 | { "T":[4507002, 203221515], "N":"core_repaint_posted", "wo":7 } 539 | { "T":[4507002, 203572827], "N":"core_commit_damage", "ws":8 } 540 | { "T":[4507002, 203630044], "N":"core_repaint_req", "wo":7, 541 | "C": [ 542 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 543 | ] } 544 | { "T":[4507002, 219083570], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 219149000] } 545 | { "T":[4507002, 219199449], "N":"core_repaint_begin", "wo":7 } 546 | { "T":[4507002, 219470426], "N":"core_flush_damage", "ws":8, "wo":7 } 547 | { "T":[4507002, 219814904], "N":"core_repaint_posted", "wo":7 } 548 | { "T":[4507002, 220221842], "N":"core_commit_damage", "ws":8 } 549 | { "T":[4507002, 220280479], "N":"core_repaint_req", "wo":7, 550 | "C": [ 551 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 552 | ] } 553 | { "T":[4507002, 235735143], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 235798000] } 554 | { "T":[4507002, 235855952], "N":"core_repaint_begin", "wo":7 } 555 | { "T":[4507002, 236175218], "N":"core_flush_damage", "ws":8, "wo":7 } 556 | { "T":[4507002, 236522329], "N":"core_repaint_posted", "wo":7 } 557 | { "T":[4507002, 236868924], "N":"core_commit_damage", "ws":8 } 558 | { "T":[4507002, 236925945], "N":"core_repaint_req", "wo":7, 559 | "C": [ 560 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 561 | ] } 562 | { "T":[4507002, 252391478], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 252451000] } 563 | { "T":[4507002, 252512755], "N":"core_repaint_begin", "wo":7 } 564 | { "T":[4507002, 252780418], "N":"core_flush_damage", "ws":8, "wo":7 } 565 | { "T":[4507002, 253176943], "N":"core_repaint_posted", "wo":7 } 566 | { "T":[4507002, 253526117], "N":"core_commit_damage", "ws":8 } 567 | { "T":[4507002, 253584082], "N":"core_repaint_req", "wo":7, 568 | "C": [ 569 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 570 | ] } 571 | { "T":[4507002, 269060915], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 269096000] } 572 | { "T":[4507002, 269172223], "N":"core_repaint_begin", "wo":7 } 573 | { "T":[4507002, 269439347], "N":"core_flush_damage", "ws":8, "wo":7 } 574 | { "T":[4507002, 269788710], "N":"core_repaint_posted", "wo":7 } 575 | { "T":[4507002, 270169479], "N":"core_commit_damage", "ws":8 } 576 | { "T":[4507002, 270227589], "N":"core_repaint_req", "wo":7, 577 | "C": [ 578 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 579 | ] } 580 | { "T":[4507002, 285650371], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 285754000] } 581 | { "T":[4507002, 285743698], "N":"core_repaint_begin", "wo":7 } 582 | { "T":[4507002, 286038425], "N":"core_flush_damage", "ws":8, "wo":7 } 583 | { "T":[4507002, 286379504], "N":"core_repaint_posted", "wo":7 } 584 | { "T":[4507002, 286712161], "N":"core_commit_damage", "ws":8 } 585 | { "T":[4507002, 286768832], "N":"core_repaint_req", "wo":7, 586 | "C": [ 587 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 588 | ] } 589 | { "T":[4507002, 302336505], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 302399000] } 590 | { "T":[4507002, 302459646], "N":"core_repaint_begin", "wo":7 } 591 | { "T":[4507002, 302728281], "N":"core_flush_damage", "ws":8, "wo":7 } 592 | { "T":[4507002, 303122240], "N":"core_repaint_posted", "wo":7 } 593 | { "T":[4507002, 303472059], "N":"core_commit_damage", "ws":8 } 594 | { "T":[4507002, 303530018], "N":"core_repaint_req", "wo":7, 595 | "C": [ 596 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 597 | ] } 598 | { "T":[4507002, 318981787], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 319049000] } 599 | { "T":[4507002, 319135355], "N":"core_repaint_begin", "wo":7 } 600 | { "T":[4507002, 319479855], "N":"core_flush_damage", "ws":8, "wo":7 } 601 | { "T":[4507002, 319825885], "N":"core_repaint_posted", "wo":7 } 602 | { "T":[4507002, 320185367], "N":"core_commit_damage", "ws":8 } 603 | { "T":[4507002, 320242539], "N":"core_repaint_req", "wo":7, 604 | "C": [ 605 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 606 | ] } 607 | { "T":[4507002, 335611339], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 335691000] } 608 | { "T":[4507002, 335733091], "N":"core_repaint_begin", "wo":7 } 609 | { "T":[4507002, 336044788], "N":"core_flush_damage", "ws":8, "wo":7 } 610 | { "T":[4507002, 336406959], "N":"core_repaint_posted", "wo":7 } 611 | { "T":[4507002, 336767911], "N":"core_commit_damage", "ws":8 } 612 | { "T":[4507002, 336825368], "N":"core_repaint_req", "wo":7, 613 | "C": [ 614 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 615 | ] } 616 | { "T":[4507002, 352285501], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 352349000] } 617 | { "T":[4507002, 352409277], "N":"core_repaint_begin", "wo":7 } 618 | { "T":[4507002, 352677044], "N":"core_flush_damage", "ws":8, "wo":7 } 619 | { "T":[4507002, 353073414], "N":"core_repaint_posted", "wo":7 } 620 | { "T":[4507002, 353446201], "N":"core_commit_damage", "ws":8 } 621 | { "T":[4507002, 353503233], "N":"core_repaint_req", "wo":7, 622 | "C": [ 623 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 624 | ] } 625 | { "T":[4507002, 368939539], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 369000000] } 626 | { "T":[4507002, 369103038], "N":"core_repaint_begin", "wo":7 } 627 | { "T":[4507002, 369369456], "N":"core_flush_damage", "ws":8, "wo":7 } 628 | { "T":[4507002, 369717521], "N":"core_repaint_posted", "wo":7 } 629 | { "T":[4507002, 370086163], "N":"core_commit_damage", "ws":8 } 630 | { "T":[4507002, 370143384], "N":"core_repaint_req", "wo":7, 631 | "C": [ 632 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 633 | ] } 634 | { "T":[4507002, 385535099], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 385642000] } 635 | { "T":[4507002, 385624847], "N":"core_repaint_begin", "wo":7 } 636 | { "T":[4507002, 385886047], "N":"core_flush_damage", "ws":8, "wo":7 } 637 | { "T":[4507002, 386269220], "N":"core_repaint_posted", "wo":7 } 638 | { "T":[4507002, 386611634], "N":"core_commit_damage", "ws":8 } 639 | { "T":[4507002, 386668435], "N":"core_repaint_req", "wo":7, 640 | "C": [ 641 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 642 | ] } 643 | { "T":[4507002, 402226925], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 402297000] } 644 | { "T":[4507002, 402339484], "N":"core_repaint_begin", "wo":7 } 645 | { "T":[4507002, 402606283], "N":"core_flush_damage", "ws":8, "wo":7 } 646 | { "T":[4507002, 402950877], "N":"core_repaint_posted", "wo":7 } 647 | { "T":[4507002, 403303141], "N":"core_commit_damage", "ws":8 } 648 | { "T":[4507002, 403360178], "N":"core_repaint_req", "wo":7, 649 | "C": [ 650 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 651 | ] } 652 | { "T":[4507002, 418886967], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 418949000] } 653 | { "T":[4507002, 419051864], "N":"core_repaint_begin", "wo":7 } 654 | { "T":[4507002, 419322852], "N":"core_flush_damage", "ws":8, "wo":7 } 655 | { "T":[4507002, 419667892], "N":"core_repaint_posted", "wo":7 } 656 | { "T":[4507002, 420031321], "N":"core_commit_damage", "ws":8 } 657 | { "T":[4507002, 420088236], "N":"core_repaint_req", "wo":7, 658 | "C": [ 659 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 660 | ] } 661 | { "T":[4507002, 435533102], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 435599000] } 662 | { "T":[4507002, 435655027], "N":"core_repaint_begin", "wo":7 } 663 | { "T":[4507002, 435927846], "N":"core_flush_damage", "ws":8, "wo":7 } 664 | { "T":[4507002, 436320307], "N":"core_repaint_posted", "wo":7 } 665 | { "T":[4507002, 436671603], "N":"core_commit_damage", "ws":8 } 666 | { "T":[4507002, 436729222], "N":"core_repaint_req", "wo":7, 667 | "C": [ 668 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 669 | ] } 670 | { "T":[4507002, 452190977], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 452252000] } 671 | { "T":[4507002, 452313586], "N":"core_repaint_begin", "wo":7 } 672 | { "T":[4507002, 452581835], "N":"core_flush_damage", "ws":8, "wo":7 } 673 | { "T":[4507002, 452925749], "N":"core_repaint_posted", "wo":7 } 674 | { "T":[4507002, 453401026], "N":"core_commit_damage", "ws":8 } 675 | { "T":[4507002, 453458774], "N":"core_repaint_req", "wo":7, 676 | "C": [ 677 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 678 | ] } 679 | { "T":[4507002, 468833795], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 468900000] } 680 | { "T":[4507002, 468944132], "N":"core_repaint_begin", "wo":7 } 681 | { "T":[4507002, 469246464], "N":"core_flush_damage", "ws":8, "wo":7 } 682 | { "T":[4507002, 469592199], "N":"core_repaint_posted", "wo":7 } 683 | { "T":[4507002, 469944610], "N":"core_commit_damage", "ws":8 } 684 | { "T":[4507002, 470019897], "N":"core_repaint_req", "wo":7, 685 | "C": [ 686 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 687 | ] } 688 | { "T":[4507002, 485489245], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 485552000] } 689 | { "T":[4507002, 485611860], "N":"core_repaint_begin", "wo":7 } 690 | { "T":[4507002, 485879624], "N":"core_flush_damage", "ws":8, "wo":7 } 691 | { "T":[4507002, 486274196], "N":"core_repaint_posted", "wo":7 } 692 | { "T":[4507002, 486625297], "N":"core_commit_damage", "ws":8 } 693 | { "T":[4507002, 486682293], "N":"core_repaint_req", "wo":7, 694 | "C": [ 695 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 696 | ] } 697 | { "T":[4507002, 502129498], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 502198000] } 698 | { "T":[4507002, 502241520], "N":"core_repaint_begin", "wo":7 } 699 | { "T":[4507002, 502507928], "N":"core_flush_damage", "ws":8, "wo":7 } 700 | { "T":[4507002, 502854583], "N":"core_repaint_posted", "wo":7 } 701 | { "T":[4507002, 503268185], "N":"core_commit_damage", "ws":8 } 702 | { "T":[4507002, 503326356], "N":"core_repaint_req", "wo":7, 703 | "C": [ 704 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 705 | ] } 706 | { "T":[4507002, 518786054], "N":"core_repaint_finished", "wo":7, "vblank":[4507002, 518851000] } 707 | { "T":[4507002, 518908268], "N":"core_repaint_begin", "wo":7 } 708 | { "T":[4507002, 519224278], "N":"core_flush_damage", "ws":8, "wo":7 } 709 | { "T":[4507002, 519572366], "N":"core_repaint_posted", "wo":7 } 710 | { "T":[4507002, 519917667], "N":"core_commit_damage", "ws":8 } 711 | { "T":[4507002, 519974818], "N":"core_repaint_req", "wo":7, 712 | "C": [ 713 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":8 } 714 | ] } 715 | -------------------------------------------------------------------------------- /testdata/timeline-presentation-i.log: -------------------------------------------------------------------------------- 1 | { "id":9, "type":"weston_surface", "desc":"top-level window 'presentation-shm'" } 2 | { "T":[4507015, 291554788], "N":"core_commit_damage", "ws":9 } 3 | { "id":10, "type":"weston_output", "name":"LVDS1" } 4 | { "id":9, "type":"weston_surface", "desc":"top-level window 'presentation-shm'" } 5 | { "T":[4507015, 291639100], "N":"core_repaint_req", "wo":10, 6 | "C": [ 7 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":9 } 8 | ] } 9 | { "T":[4507015, 291648220], "N":"core_repaint_enter_loop", "wo":10, 10 | "C": [ 11 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":9 } 12 | ] } 13 | { "T":[4507015, 306088848], "N":"core_repaint_finished", "wo":10, "vblank":[4507015, 306152000] } 14 | { "T":[4507015, 306189221], "N":"core_repaint_begin", "wo":10 } 15 | { "T":[4507015, 306492011], "N":"core_flush_damage", "ws":9, "wo":10 } 16 | { "T":[4507015, 306852068], "N":"core_repaint_posted", "wo":10 } 17 | { "T":[4507015, 322742677], "N":"core_repaint_finished", "wo":10, "vblank":[4507015, 322803000] } 18 | { "T":[4507015, 322865057], "N":"core_repaint_exit_loop", "wo":10 } 19 | { "T":[4507016, 307400901], "N":"core_commit_damage", "ws":9 } 20 | { "T":[4507016, 307487900], "N":"core_repaint_req", "wo":10, 21 | "C": [ 22 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":9 } 23 | ] } 24 | { "T":[4507016, 307512105], "N":"core_repaint_enter_loop", "wo":10, 25 | "C": [ 26 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":9 } 27 | ] } 28 | { "T":[4507016, 321745061], "N":"core_repaint_finished", "wo":10, "vblank":[4507016, 321811000] } 29 | { "T":[4507016, 321843774], "N":"core_repaint_begin", "wo":10 } 30 | { "T":[4507016, 322184562], "N":"core_flush_damage", "ws":9, "wo":10 } 31 | { "T":[4507016, 322548768], "N":"core_repaint_posted", "wo":10 } 32 | { "T":[4507016, 338396975], "N":"core_repaint_finished", "wo":10, "vblank":[4507016, 338462000] } 33 | { "T":[4507016, 338466334], "N":"core_repaint_exit_loop", "wo":10 } 34 | { "T":[4507017, 322944398], "N":"core_commit_damage", "ws":9 } 35 | { "T":[4507017, 323034397], "N":"core_repaint_req", "wo":10, 36 | "C": [ 37 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":9 } 38 | ] } 39 | { "T":[4507017, 323061647], "N":"core_repaint_enter_loop", "wo":10, 40 | "C": [ 41 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":9 } 42 | ] } 43 | { "T":[4507017, 337321678], "N":"core_repaint_finished", "wo":10, "vblank":[4507017, 337473000] } 44 | { "T":[4507017, 337379723], "N":"core_repaint_begin", "wo":10 } 45 | { "T":[4507017, 337661669], "N":"core_flush_damage", "ws":9, "wo":10 } 46 | { "T":[4507017, 337990635], "N":"core_repaint_posted", "wo":10 } 47 | { "T":[4507017, 353969849], "N":"core_repaint_finished", "wo":10, "vblank":[4507017, 354123000] } 48 | { "T":[4507017, 354064729], "N":"core_repaint_exit_loop", "wo":10 } 49 | { "T":[4507018, 338313187], "N":"core_commit_damage", "ws":9 } 50 | { "T":[4507018, 338377337], "N":"core_repaint_req", "wo":10, 51 | "C": [ 52 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":9 } 53 | ] } 54 | { "T":[4507018, 338401290], "N":"core_repaint_enter_loop", "wo":10, 55 | "C": [ 56 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":9 } 57 | ] } 58 | { "T":[4507018, 352977679], "N":"core_repaint_finished", "wo":10, "vblank":[4507018, 353131000] } 59 | { "T":[4507018, 353055633], "N":"core_repaint_begin", "wo":10 } 60 | { "T":[4507018, 353345326], "N":"core_flush_damage", "ws":9, "wo":10 } 61 | { "T":[4507018, 353690534], "N":"core_repaint_posted", "wo":10 } 62 | { "T":[4507018, 369626779], "N":"core_repaint_finished", "wo":10, "vblank":[4507018, 369781000] } 63 | { "T":[4507018, 369700419], "N":"core_repaint_exit_loop", "wo":10 } 64 | -------------------------------------------------------------------------------- /testdata/timeline-presentation-p.log: -------------------------------------------------------------------------------- 1 | { "id":11, "type":"weston_output", "name":"LVDS1" } 2 | { "T":[4507044, 893387500], "N":"core_repaint_finished", "wo":11, "vblank":[4507044, 893438000] } 3 | { "T":[4507044, 893512554], "N":"core_repaint_begin", "wo":11 } 4 | { "id":12, "type":"weston_surface", "desc":"top-level window 'presentation-shm'" } 5 | { "T":[4507044, 893782581], "N":"core_flush_damage", "ws":12, "wo":11 } 6 | { "T":[4507044, 894184756], "N":"core_repaint_posted", "wo":11 } 7 | { "T":[4507044, 910055662], "N":"core_repaint_finished", "wo":11, "vblank":[4507044, 910090000] } 8 | { "T":[4507044, 910172293], "N":"core_repaint_exit_loop", "wo":11 } 9 | { "id":12, "type":"weston_surface", "desc":"top-level window 'presentation-shm'" } 10 | { "T":[4507044, 910412318], "N":"core_commit_damage", "ws":12 } 11 | { "T":[4507044, 910455920], "N":"core_repaint_req", "wo":11, 12 | "C": [ 13 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 14 | ] } 15 | { "T":[4507044, 910478268], "N":"core_repaint_enter_loop", "wo":11, 16 | "C": [ 17 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 18 | ] } 19 | { "T":[4507044, 926636769], "N":"core_repaint_finished", "wo":11, "vblank":[4507044, 926735000] } 20 | { "T":[4507044, 926708434], "N":"core_repaint_begin", "wo":11 } 21 | { "T":[4507044, 926959088], "N":"core_flush_damage", "ws":12, "wo":11 } 22 | { "T":[4507044, 927331816], "N":"core_repaint_posted", "wo":11 } 23 | { "T":[4507044, 943335611], "N":"core_repaint_finished", "wo":11, "vblank":[4507044, 943386000] } 24 | { "T":[4507044, 943456426], "N":"core_repaint_exit_loop", "wo":11 } 25 | { "T":[4507044, 943706578], "N":"core_commit_damage", "ws":12 } 26 | { "T":[4507044, 943744046], "N":"core_repaint_req", "wo":11, 27 | "C": [ 28 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 29 | ] } 30 | { "T":[4507044, 943766233], "N":"core_repaint_enter_loop", "wo":11, 31 | "C": [ 32 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 33 | ] } 34 | { "T":[4507044, 959984565], "N":"core_repaint_finished", "wo":11, "vblank":[4507044, 960037000] } 35 | { "T":[4507044, 960118066], "N":"core_repaint_begin", "wo":11 } 36 | { "T":[4507044, 960380800], "N":"core_flush_damage", "ws":12, "wo":11 } 37 | { "T":[4507044, 960707704], "N":"core_repaint_posted", "wo":11 } 38 | { "T":[4507044, 976641230], "N":"core_repaint_finished", "wo":11, "vblank":[4507044, 976691000] } 39 | { "T":[4507044, 976763600], "N":"core_repaint_exit_loop", "wo":11 } 40 | { "T":[4507044, 977045963], "N":"core_commit_damage", "ws":12 } 41 | { "T":[4507044, 977084329], "N":"core_repaint_req", "wo":11, 42 | "C": [ 43 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 44 | ] } 45 | { "T":[4507044, 977106656], "N":"core_repaint_enter_loop", "wo":11, 46 | "C": [ 47 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 48 | ] } 49 | { "T":[4507044, 993285950], "N":"core_repaint_finished", "wo":11, "vblank":[4507044, 993337000] } 50 | { "T":[4507044, 993380549], "N":"core_repaint_begin", "wo":11 } 51 | { "T":[4507044, 993648069], "N":"core_flush_damage", "ws":12, "wo":11 } 52 | { "T":[4507044, 993987553], "N":"core_repaint_posted", "wo":11 } 53 | { "T":[4507045, 9941269], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 9990000] } 54 | { "T":[4507045, 10106429], "N":"core_repaint_exit_loop", "wo":11 } 55 | { "T":[4507045, 10348049], "N":"core_commit_damage", "ws":12 } 56 | { "T":[4507045, 10386209], "N":"core_repaint_req", "wo":11, 57 | "C": [ 58 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 59 | ] } 60 | { "T":[4507045, 10408532], "N":"core_repaint_enter_loop", "wo":11, 61 | "C": [ 62 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 63 | ] } 64 | { "T":[4507045, 26563973], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 26643000] } 65 | { "T":[4507045, 26635577], "N":"core_repaint_begin", "wo":11 } 66 | { "T":[4507045, 26896279], "N":"core_flush_damage", "ws":12, "wo":11 } 67 | { "T":[4507045, 27246023], "N":"core_repaint_posted", "wo":11 } 68 | { "T":[4507045, 43244043], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 43290000] } 69 | { "T":[4507045, 43368560], "N":"core_repaint_exit_loop", "wo":11 } 70 | { "T":[4507045, 43617083], "N":"core_commit_damage", "ws":12 } 71 | { "T":[4507045, 43653637], "N":"core_repaint_req", "wo":11, 72 | "C": [ 73 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 74 | ] } 75 | { "T":[4507045, 43767495], "N":"core_repaint_enter_loop", "wo":11, 76 | "C": [ 77 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 78 | ] } 79 | { "T":[4507045, 59891262], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 59943000] } 80 | { "T":[4507045, 59981883], "N":"core_repaint_begin", "wo":11 } 81 | { "T":[4507045, 60290728], "N":"core_flush_damage", "ws":12, "wo":11 } 82 | { "T":[4507045, 60635927], "N":"core_repaint_posted", "wo":11 } 83 | { "T":[4507045, 76543256], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 76592000] } 84 | { "T":[4507045, 76665285], "N":"core_repaint_exit_loop", "wo":11 } 85 | { "T":[4507045, 76913065], "N":"core_commit_damage", "ws":12 } 86 | { "T":[4507045, 76951485], "N":"core_repaint_req", "wo":11, 87 | "C": [ 88 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 89 | ] } 90 | { "T":[4507045, 76973949], "N":"core_repaint_enter_loop", "wo":11, 91 | "C": [ 92 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 93 | ] } 94 | { "T":[4507045, 93191188], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 93242000] } 95 | { "T":[4507045, 93282286], "N":"core_repaint_begin", "wo":11 } 96 | { "T":[4507045, 93548276], "N":"core_flush_damage", "ws":12, "wo":11 } 97 | { "T":[4507045, 93891532], "N":"core_repaint_posted", "wo":11 } 98 | { "T":[4507045, 109843080], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 109891000] } 99 | { "T":[4507045, 109959190], "N":"core_repaint_exit_loop", "wo":11 } 100 | { "T":[4507045, 110241934], "N":"core_commit_damage", "ws":12 } 101 | { "T":[4507045, 110280018], "N":"core_repaint_req", "wo":11, 102 | "C": [ 103 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 104 | ] } 105 | { "T":[4507045, 110302687], "N":"core_repaint_enter_loop", "wo":11, 106 | "C": [ 107 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 108 | ] } 109 | { "T":[4507045, 126491557], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 126543000] } 110 | { "T":[4507045, 126587024], "N":"core_repaint_begin", "wo":11 } 111 | { "T":[4507045, 126855964], "N":"core_flush_damage", "ws":12, "wo":11 } 112 | { "T":[4507045, 127249370], "N":"core_repaint_posted", "wo":11 } 113 | { "T":[4507045, 143143299], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 143192000] } 114 | { "T":[4507045, 143262193], "N":"core_repaint_exit_loop", "wo":11 } 115 | { "T":[4507045, 143508132], "N":"core_commit_damage", "ws":12 } 116 | { "T":[4507045, 143545815], "N":"core_repaint_req", "wo":11, 117 | "C": [ 118 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 119 | ] } 120 | { "T":[4507045, 143568017], "N":"core_repaint_enter_loop", "wo":11, 121 | "C": [ 122 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 123 | ] } 124 | { "T":[4507045, 159786138], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 159839000] } 125 | { "T":[4507045, 159878866], "N":"core_repaint_begin", "wo":11 } 126 | { "T":[4507045, 160197572], "N":"core_flush_damage", "ws":12, "wo":11 } 127 | { "T":[4507045, 160542836], "N":"core_repaint_posted", "wo":11 } 128 | { "T":[4507045, 176434030], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 176493000] } 129 | { "T":[4507045, 176558316], "N":"core_repaint_exit_loop", "wo":11 } 130 | { "T":[4507045, 176890887], "N":"core_commit_damage", "ws":12 } 131 | { "T":[4507045, 176948340], "N":"core_repaint_req", "wo":11, 132 | "C": [ 133 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 134 | ] } 135 | { "T":[4507045, 176971676], "N":"core_repaint_enter_loop", "wo":11, 136 | "C": [ 137 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 138 | ] } 139 | { "T":[4507045, 193077053], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 193141000] } 140 | { "T":[4507045, 193175771], "N":"core_repaint_begin", "wo":11 } 141 | { "T":[4507045, 193447469], "N":"core_flush_damage", "ws":12, "wo":11 } 142 | { "T":[4507045, 193795347], "N":"core_repaint_posted", "wo":11 } 143 | { "T":[4507045, 209724601], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 209794000] } 144 | { "T":[4507045, 209847477], "N":"core_repaint_exit_loop", "wo":11 } 145 | { "T":[4507045, 210219946], "N":"core_commit_damage", "ws":12 } 146 | { "T":[4507045, 210278041], "N":"core_repaint_req", "wo":11, 147 | "C": [ 148 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 149 | ] } 150 | { "T":[4507045, 210302180], "N":"core_repaint_enter_loop", "wo":11, 151 | "C": [ 152 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 153 | ] } 154 | { "T":[4507045, 226377748], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 226443000] } 155 | { "T":[4507045, 226476687], "N":"core_repaint_begin", "wo":11 } 156 | { "T":[4507045, 226750989], "N":"core_flush_damage", "ws":12, "wo":11 } 157 | { "T":[4507045, 227142008], "N":"core_repaint_posted", "wo":11 } 158 | { "T":[4507045, 243068220], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 243093000] } 159 | { "T":[4507045, 243192767], "N":"core_repaint_exit_loop", "wo":11 } 160 | { "T":[4507045, 243518225], "N":"core_commit_damage", "ws":12 } 161 | { "T":[4507045, 243575608], "N":"core_repaint_req", "wo":11, 162 | "C": [ 163 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 164 | ] } 165 | { "T":[4507045, 243598994], "N":"core_repaint_enter_loop", "wo":11, 166 | "C": [ 167 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 168 | ] } 169 | { "T":[4507045, 259681095], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 259744000] } 170 | { "T":[4507045, 259779487], "N":"core_repaint_begin", "wo":11 } 171 | { "T":[4507045, 260099559], "N":"core_flush_damage", "ws":12, "wo":11 } 172 | { "T":[4507045, 260444436], "N":"core_repaint_posted", "wo":11 } 173 | { "T":[4507045, 276325483], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 276392000] } 174 | { "T":[4507045, 276450472], "N":"core_repaint_exit_loop", "wo":11 } 175 | { "T":[4507045, 276779939], "N":"core_commit_damage", "ws":12 } 176 | { "T":[4507045, 276838530], "N":"core_repaint_req", "wo":11, 177 | "C": [ 178 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 179 | ] } 180 | { "T":[4507045, 276862072], "N":"core_repaint_enter_loop", "wo":11, 181 | "C": [ 182 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 183 | ] } 184 | { "T":[4507045, 292979027], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 293042000] } 185 | { "T":[4507045, 293117550], "N":"core_repaint_begin", "wo":11 } 186 | { "T":[4507045, 293385360], "N":"core_flush_damage", "ws":12, "wo":11 } 187 | { "T":[4507045, 293728231], "N":"core_repaint_posted", "wo":11 } 188 | { "T":[4507045, 309586040], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 309689000] } 189 | { "T":[4507045, 309701352], "N":"core_repaint_exit_loop", "wo":11 } 190 | { "T":[4507045, 309979928], "N":"core_commit_damage", "ws":12 } 191 | { "T":[4507045, 310032851], "N":"core_repaint_req", "wo":11, 192 | "C": [ 193 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 194 | ] } 195 | { "T":[4507045, 310055665], "N":"core_repaint_enter_loop", "wo":11, 196 | "C": [ 197 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 198 | ] } 199 | { "T":[4507045, 326277934], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 326346000] } 200 | { "T":[4507045, 326372202], "N":"core_repaint_begin", "wo":11 } 201 | { "T":[4507045, 326643660], "N":"core_flush_damage", "ws":12, "wo":11 } 202 | { "T":[4507045, 326989972], "N":"core_repaint_posted", "wo":11 } 203 | { "T":[4507045, 342931243], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 342993000] } 204 | { "T":[4507045, 343098515], "N":"core_repaint_exit_loop", "wo":11 } 205 | { "T":[4507045, 343424726], "N":"core_commit_damage", "ws":12 } 206 | { "T":[4507045, 343482911], "N":"core_repaint_req", "wo":11, 207 | "C": [ 208 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 209 | ] } 210 | { "T":[4507045, 343507240], "N":"core_repaint_enter_loop", "wo":11, 211 | "C": [ 212 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 213 | ] } 214 | { "T":[4507045, 359579998], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 359643000] } 215 | { "T":[4507045, 359677863], "N":"core_repaint_begin", "wo":11 } 216 | { "T":[4507045, 359951602], "N":"core_flush_damage", "ws":12, "wo":11 } 217 | { "T":[4507045, 360342490], "N":"core_repaint_posted", "wo":11 } 218 | { "T":[4507045, 376227576], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 376294000] } 219 | { "T":[4507045, 376351401], "N":"core_repaint_exit_loop", "wo":11 } 220 | { "T":[4507045, 376676925], "N":"core_commit_damage", "ws":12 } 221 | { "T":[4507045, 376734593], "N":"core_repaint_req", "wo":11, 222 | "C": [ 223 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 224 | ] } 225 | { "T":[4507045, 376758426], "N":"core_repaint_enter_loop", "wo":11, 226 | "C": [ 227 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 228 | ] } 229 | { "T":[4507045, 392876668], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 392945000] } 230 | { "T":[4507045, 392965870], "N":"core_repaint_begin", "wo":11 } 231 | { "T":[4507045, 393271137], "N":"core_flush_damage", "ws":12, "wo":11 } 232 | { "T":[4507045, 393618011], "N":"core_repaint_posted", "wo":11 } 233 | { "T":[4507045, 409531020], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 409598000] } 234 | { "T":[4507045, 409648861], "N":"core_repaint_exit_loop", "wo":11 } 235 | { "T":[4507045, 409983686], "N":"core_commit_damage", "ws":12 } 236 | { "T":[4507045, 410066466], "N":"core_repaint_req", "wo":11, 237 | "C": [ 238 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 239 | ] } 240 | { "T":[4507045, 410091027], "N":"core_repaint_enter_loop", "wo":11, 241 | "C": [ 242 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 243 | ] } 244 | { "T":[4507045, 426181661], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 426244000] } 245 | { "T":[4507045, 426280309], "N":"core_repaint_begin", "wo":11 } 246 | { "T":[4507045, 426552262], "N":"core_flush_damage", "ws":12, "wo":11 } 247 | { "T":[4507045, 426893443], "N":"core_repaint_posted", "wo":11 } 248 | { "T":[4507045, 442833499], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 442894000] } 249 | { "T":[4507045, 442958703], "N":"core_repaint_exit_loop", "wo":11 } 250 | { "T":[4507045, 443329686], "N":"core_commit_damage", "ws":12 } 251 | { "T":[4507045, 443387350], "N":"core_repaint_req", "wo":11, 252 | "C": [ 253 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 254 | ] } 255 | { "T":[4507045, 443410666], "N":"core_repaint_enter_loop", "wo":11, 256 | "C": [ 257 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 258 | ] } 259 | { "T":[4507045, 459475957], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 459544000] } 260 | { "T":[4507045, 459573787], "N":"core_repaint_begin", "wo":11 } 261 | { "T":[4507045, 459849468], "N":"core_flush_damage", "ws":12, "wo":11 } 262 | { "T":[4507045, 460244565], "N":"core_repaint_posted", "wo":11 } 263 | { "T":[4507045, 476134711], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 476195000] } 264 | { "T":[4507045, 476261095], "N":"core_repaint_exit_loop", "wo":11 } 265 | { "T":[4507045, 476590693], "N":"core_commit_damage", "ws":12 } 266 | { "T":[4507045, 476649164], "N":"core_repaint_req", "wo":11, 267 | "C": [ 268 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 269 | ] } 270 | { "T":[4507045, 476673233], "N":"core_repaint_enter_loop", "wo":11, 271 | "C": [ 272 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 273 | ] } 274 | { "T":[4507045, 492774689], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 492845000] } 275 | { "T":[4507045, 492870281], "N":"core_repaint_begin", "wo":11 } 276 | { "T":[4507045, 493186445], "N":"core_flush_damage", "ws":12, "wo":11 } 277 | { "T":[4507045, 493532331], "N":"core_repaint_posted", "wo":11 } 278 | { "T":[4507045, 509428012], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 509494000] } 279 | { "T":[4507045, 509543695], "N":"core_repaint_exit_loop", "wo":11 } 280 | { "T":[4507045, 509869595], "N":"core_commit_damage", "ws":12 } 281 | { "T":[4507045, 509927003], "N":"core_repaint_req", "wo":11, 282 | "C": [ 283 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 284 | ] } 285 | { "T":[4507045, 509950991], "N":"core_repaint_enter_loop", "wo":11, 286 | "C": [ 287 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 288 | ] } 289 | { "T":[4507045, 526075170], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 526145000] } 290 | { "T":[4507045, 526164678], "N":"core_repaint_begin", "wo":11 } 291 | { "T":[4507045, 526428294], "N":"core_flush_damage", "ws":12, "wo":11 } 292 | { "T":[4507045, 526776984], "N":"core_repaint_posted", "wo":11 } 293 | { "T":[4507045, 542739472], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 542798000] } 294 | { "T":[4507045, 542863868], "N":"core_repaint_exit_loop", "wo":11 } 295 | { "T":[4507045, 543240535], "N":"core_commit_damage", "ws":12 } 296 | { "T":[4507045, 543299257], "N":"core_repaint_req", "wo":11, 297 | "C": [ 298 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 299 | ] } 300 | { "T":[4507045, 543322959], "N":"core_repaint_enter_loop", "wo":11, 301 | "C": [ 302 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 303 | ] } 304 | { "T":[4507045, 559376752], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 559444000] } 305 | { "T":[4507045, 559524916], "N":"core_repaint_begin", "wo":11 } 306 | { "T":[4507045, 559791046], "N":"core_flush_damage", "ws":12, "wo":11 } 307 | { "T":[4507045, 560188706], "N":"core_repaint_posted", "wo":11 } 308 | { "T":[4507045, 576074273], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 576098000] } 309 | { "T":[4507045, 576197129], "N":"core_repaint_exit_loop", "wo":11 } 310 | { "T":[4507045, 576522592], "N":"core_commit_damage", "ws":12 } 311 | { "T":[4507045, 576580752], "N":"core_repaint_req", "wo":11, 312 | "C": [ 313 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 314 | ] } 315 | { "T":[4507045, 576604820], "N":"core_repaint_enter_loop", "wo":11, 316 | "C": [ 317 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 318 | ] } 319 | { "T":[4507045, 592682577], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 592746000] } 320 | { "T":[4507045, 592780989], "N":"core_repaint_begin", "wo":11 } 321 | { "T":[4507045, 593100945], "N":"core_flush_damage", "ws":12, "wo":11 } 322 | { "T":[4507045, 593444389], "N":"core_repaint_posted", "wo":11 } 323 | { "T":[4507045, 609323983], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 609393000] } 324 | { "T":[4507045, 609440027], "N":"core_repaint_exit_loop", "wo":11 } 325 | { "T":[4507045, 609766886], "N":"core_commit_damage", "ws":12 } 326 | { "T":[4507045, 609824880], "N":"core_repaint_req", "wo":11, 327 | "C": [ 328 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 329 | ] } 330 | { "T":[4507045, 609848608], "N":"core_repaint_enter_loop", "wo":11, 331 | "C": [ 332 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 333 | ] } 334 | { "T":[4507045, 625983323], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 626047000] } 335 | { "T":[4507045, 626119563], "N":"core_repaint_begin", "wo":11 } 336 | { "T":[4507045, 626385743], "N":"core_flush_damage", "ws":12, "wo":11 } 337 | { "T":[4507045, 626726798], "N":"core_repaint_posted", "wo":11 } 338 | { "T":[4507045, 642634682], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 642696000] } 339 | { "T":[4507045, 642758944], "N":"core_repaint_exit_loop", "wo":11 } 340 | { "T":[4507045, 643096045], "N":"core_commit_damage", "ws":12 } 341 | { "T":[4507045, 643154135], "N":"core_repaint_req", "wo":11, 342 | "C": [ 343 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 344 | ] } 345 | { "T":[4507045, 643178379], "N":"core_repaint_enter_loop", "wo":11, 346 | "C": [ 347 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 348 | ] } 349 | { "T":[4507045, 659281607], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 659345000] } 350 | { "T":[4507045, 659378961], "N":"core_repaint_begin", "wo":11 } 351 | { "T":[4507045, 659648291], "N":"core_flush_damage", "ws":12, "wo":11 } 352 | { "T":[4507045, 659993439], "N":"core_repaint_posted", "wo":11 } 353 | { "T":[4507045, 675936072], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 675996000] } 354 | { "T":[4507045, 676100223], "N":"core_repaint_exit_loop", "wo":11 } 355 | { "T":[4507045, 676429027], "N":"core_commit_damage", "ws":12 } 356 | { "T":[4507045, 676488100], "N":"core_repaint_req", "wo":11, 357 | "C": [ 358 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 359 | ] } 360 | { "T":[4507045, 676512249], "N":"core_repaint_enter_loop", "wo":11, 361 | "C": [ 362 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 363 | ] } 364 | { "T":[4507045, 692449013], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 692628000] } 365 | { "T":[4507045, 692521289], "N":"core_repaint_begin", "wo":11 } 366 | { "T":[4507045, 692877744], "N":"core_flush_damage", "ws":12, "wo":11 } 367 | { "T":[4507045, 693278918], "N":"core_repaint_posted", "wo":11 } 368 | { "T":[4507045, 709205623], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 709286000] } 369 | { "T":[4507045, 709297411], "N":"core_repaint_exit_loop", "wo":11 } 370 | { "T":[4507045, 709607613], "N":"core_commit_damage", "ws":12 } 371 | { "T":[4507045, 709643174], "N":"core_repaint_req", "wo":11, 372 | "C": [ 373 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 374 | ] } 375 | { "T":[4507045, 709655022], "N":"core_repaint_enter_loop", "wo":11, 376 | "C": [ 377 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 378 | ] } 379 | { "T":[4507045, 725871428], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 725946000] } 380 | { "T":[4507045, 726102212], "N":"core_repaint_begin", "wo":11 } 381 | { "T":[4507045, 726383301], "N":"core_flush_damage", "ws":12, "wo":11 } 382 | { "T":[4507045, 726736325], "N":"core_repaint_posted", "wo":11 } 383 | { "T":[4507045, 742525647], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 742597000] } 384 | { "T":[4507045, 742655631], "N":"core_repaint_exit_loop", "wo":11 } 385 | { "T":[4507045, 742994303], "N":"core_commit_damage", "ws":12 } 386 | { "T":[4507045, 743099507], "N":"core_repaint_req", "wo":11, 387 | "C": [ 388 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 389 | ] } 390 | { "T":[4507045, 743123761], "N":"core_repaint_enter_loop", "wo":11, 391 | "C": [ 392 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 393 | ] } 394 | { "T":[4507045, 759166618], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 759245000] } 395 | { "T":[4507045, 759263509], "N":"core_repaint_begin", "wo":11 } 396 | { "T":[4507045, 759582186], "N":"core_flush_damage", "ws":12, "wo":11 } 397 | { "T":[4507045, 759945789], "N":"core_repaint_posted", "wo":11 } 398 | { "T":[4507045, 775816903], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 775893000] } 399 | { "T":[4507045, 775935209], "N":"core_repaint_exit_loop", "wo":11 } 400 | { "T":[4507045, 776277979], "N":"core_commit_damage", "ws":12 } 401 | { "T":[4507045, 776345108], "N":"core_repaint_req", "wo":11, 402 | "C": [ 403 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 404 | ] } 405 | { "T":[4507045, 776369347], "N":"core_repaint_enter_loop", "wo":11, 406 | "C": [ 407 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 408 | ] } 409 | { "T":[4507045, 792473700], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 792548000] } 410 | { "T":[4507045, 792574816], "N":"core_repaint_begin", "wo":11 } 411 | { "T":[4507045, 792887523], "N":"core_flush_damage", "ws":12, "wo":11 } 412 | { "T":[4507045, 793337930], "N":"core_repaint_posted", "wo":11 } 413 | { "T":[4507045, 809120397], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 809195000] } 414 | { "T":[4507045, 809243976], "N":"core_repaint_exit_loop", "wo":11 } 415 | { "T":[4507045, 809585312], "N":"core_commit_damage", "ws":12 } 416 | { "T":[4507045, 809651197], "N":"core_repaint_req", "wo":11, 417 | "C": [ 418 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 419 | ] } 420 | { "T":[4507045, 809674865], "N":"core_repaint_enter_loop", "wo":11, 421 | "C": [ 422 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 423 | ] } 424 | { "T":[4507045, 825791167], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 825844000] } 425 | { "T":[4507045, 825883113], "N":"core_repaint_begin", "wo":11 } 426 | { "T":[4507045, 826204338], "N":"core_flush_damage", "ws":12, "wo":11 } 427 | { "T":[4507045, 826548016], "N":"core_repaint_posted", "wo":11 } 428 | { "T":[4507045, 842448241], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 842497000] } 429 | { "T":[4507045, 842564972], "N":"core_repaint_exit_loop", "wo":11 } 430 | { "T":[4507045, 842810369], "N":"core_commit_damage", "ws":12 } 431 | { "T":[4507045, 842847089], "N":"core_repaint_req", "wo":11, 432 | "C": [ 433 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 434 | ] } 435 | { "T":[4507045, 842869241], "N":"core_repaint_enter_loop", "wo":11, 436 | "C": [ 437 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 438 | ] } 439 | { "T":[4507045, 859097754], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 859148000] } 440 | { "T":[4507045, 859191375], "N":"core_repaint_begin", "wo":11 } 441 | { "T":[4507045, 859460314], "N":"core_flush_damage", "ws":12, "wo":11 } 442 | { "T":[4507045, 859806104], "N":"core_repaint_posted", "wo":11 } 443 | { "T":[4507045, 875750328], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 875798000] } 444 | { "T":[4507045, 875867405], "N":"core_repaint_exit_loop", "wo":11 } 445 | { "T":[4507045, 876171004], "N":"core_commit_damage", "ws":12 } 446 | { "T":[4507045, 876211376], "N":"core_repaint_req", "wo":11, 447 | "C": [ 448 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 449 | ] } 450 | { "T":[4507045, 876233669], "N":"core_repaint_enter_loop", "wo":11, 451 | "C": [ 452 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 453 | ] } 454 | { "T":[4507045, 892355260], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 892451000] } 455 | { "T":[4507045, 892471470], "N":"core_repaint_begin", "wo":11 } 456 | { "T":[4507045, 892727366], "N":"core_flush_damage", "ws":12, "wo":11 } 457 | { "T":[4507045, 893114507], "N":"core_repaint_posted", "wo":11 } 458 | { "T":[4507045, 909050682], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 909099000] } 459 | { "T":[4507045, 909167644], "N":"core_repaint_exit_loop", "wo":11 } 460 | { "T":[4507045, 909407518], "N":"core_commit_damage", "ws":12 } 461 | { "T":[4507045, 909442934], "N":"core_repaint_req", "wo":11, 462 | "C": [ 463 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 464 | ] } 465 | { "T":[4507045, 909464921], "N":"core_repaint_enter_loop", "wo":11, 466 | "C": [ 467 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 468 | ] } 469 | { "T":[4507045, 925695411], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 925747000] } 470 | { "T":[4507045, 925788556], "N":"core_repaint_begin", "wo":11 } 471 | { "T":[4507045, 926103310], "N":"core_flush_damage", "ws":12, "wo":11 } 472 | { "T":[4507045, 926443597], "N":"core_repaint_posted", "wo":11 } 473 | { "T":[4507045, 942351205], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 942399000] } 474 | { "T":[4507045, 942474157], "N":"core_repaint_exit_loop", "wo":11 } 475 | { "T":[4507045, 942722614], "N":"core_commit_damage", "ws":12 } 476 | { "T":[4507045, 942759795], "N":"core_repaint_req", "wo":11, 477 | "C": [ 478 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 479 | ] } 480 | { "T":[4507045, 942781988], "N":"core_repaint_enter_loop", "wo":11, 481 | "C": [ 482 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 483 | ] } 484 | { "T":[4507045, 959041828], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 959049000] } 485 | { "T":[4507045, 959140230], "N":"core_repaint_begin", "wo":11 } 486 | { "T":[4507045, 959405377], "N":"core_flush_damage", "ws":12, "wo":11 } 487 | { "T":[4507045, 959745594], "N":"core_repaint_posted", "wo":11 } 488 | { "T":[4507045, 975650275], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 975699000] } 489 | { "T":[4507045, 975765758], "N":"core_repaint_exit_loop", "wo":11 } 490 | { "T":[4507045, 976048327], "N":"core_commit_damage", "ws":12 } 491 | { "T":[4507045, 976086416], "N":"core_repaint_req", "wo":11, 492 | "C": [ 493 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 494 | ] } 495 | { "T":[4507045, 976108182], "N":"core_repaint_enter_loop", "wo":11, 496 | "C": [ 497 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 498 | ] } 499 | { "T":[4507045, 992297313], "N":"core_repaint_finished", "wo":11, "vblank":[4507045, 992348000] } 500 | { "T":[4507045, 992391475], "N":"core_repaint_begin", "wo":11 } 501 | { "T":[4507045, 992653783], "N":"core_flush_damage", "ws":12, "wo":11 } 502 | { "T":[4507045, 992999412], "N":"core_repaint_posted", "wo":11 } 503 | { "T":[4507046, 8952048], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 8998000] } 504 | { "T":[4507046, 9117735], "N":"core_repaint_exit_loop", "wo":11 } 505 | { "T":[4507046, 9362294], "N":"core_commit_damage", "ws":12 } 506 | { "T":[4507046, 9401066], "N":"core_repaint_req", "wo":11, 507 | "C": [ 508 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 509 | ] } 510 | { "T":[4507046, 9423399], "N":"core_repaint_enter_loop", "wo":11, 511 | "C": [ 512 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 513 | ] } 514 | { "T":[4507046, 25599791], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 25650000] } 515 | { "T":[4507046, 25689674], "N":"core_repaint_begin", "wo":11 } 516 | { "T":[4507046, 25962627], "N":"core_flush_damage", "ws":12, "wo":11 } 517 | { "T":[4507046, 26354859], "N":"core_repaint_posted", "wo":11 } 518 | { "T":[4507046, 42246899], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 42296000] } 519 | { "T":[4507046, 42362180], "N":"core_repaint_exit_loop", "wo":11 } 520 | { "T":[4507046, 42600840], "N":"core_commit_damage", "ws":12 } 521 | { "T":[4507046, 42637229], "N":"core_repaint_req", "wo":11, 522 | "C": [ 523 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 524 | ] } 525 | { "T":[4507046, 42658839], "N":"core_repaint_enter_loop", "wo":11, 526 | "C": [ 527 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 528 | ] } 529 | { "T":[4507046, 58894605], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 58947000] } 530 | { "T":[4507046, 58987684], "N":"core_repaint_begin", "wo":11 } 531 | { "T":[4507046, 59303190], "N":"core_flush_damage", "ws":12, "wo":11 } 532 | { "T":[4507046, 59705867], "N":"core_repaint_posted", "wo":11 } 533 | { "T":[4507046, 75514256], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 75588000] } 534 | { "T":[4507046, 75636591], "N":"core_repaint_exit_loop", "wo":11 } 535 | { "T":[4507046, 75885013], "N":"core_commit_damage", "ws":12 } 536 | { "T":[4507046, 75925044], "N":"core_repaint_req", "wo":11, 537 | "C": [ 538 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 539 | ] } 540 | { "T":[4507046, 75947602], "N":"core_repaint_enter_loop", "wo":11, 541 | "C": [ 542 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 543 | ] } 544 | { "T":[4507046, 92194652], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 92247000] } 545 | { "T":[4507046, 92286859], "N":"core_repaint_begin", "wo":11 } 546 | { "T":[4507046, 92552834], "N":"core_flush_damage", "ws":12, "wo":11 } 547 | { "T":[4507046, 92895519], "N":"core_repaint_posted", "wo":11 } 548 | { "T":[4507046, 108851366], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 108900000] } 549 | { "T":[4507046, 108965373], "N":"core_repaint_exit_loop", "wo":11 } 550 | { "T":[4507046, 109256560], "N":"core_commit_damage", "ws":12 } 551 | { "T":[4507046, 109296446], "N":"core_repaint_req", "wo":11, 552 | "C": [ 553 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 554 | ] } 555 | { "T":[4507046, 109319060], "N":"core_repaint_enter_loop", "wo":11, 556 | "C": [ 557 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 558 | ] } 559 | { "T":[4507046, 125494949], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 125547000] } 560 | { "T":[4507046, 125587051], "N":"core_repaint_begin", "wo":11 } 561 | { "T":[4507046, 125857690], "N":"core_flush_damage", "ws":12, "wo":11 } 562 | { "T":[4507046, 126251438], "N":"core_repaint_posted", "wo":11 } 563 | { "T":[4507046, 142154017], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 142202000] } 564 | { "T":[4507046, 142277371], "N":"core_repaint_exit_loop", "wo":11 } 565 | { "T":[4507046, 142525688], "N":"core_commit_damage", "ws":12 } 566 | { "T":[4507046, 142562453], "N":"core_repaint_req", "wo":11, 567 | "C": [ 568 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 569 | ] } 570 | { "T":[4507046, 142585212], "N":"core_repaint_enter_loop", "wo":11, 571 | "C": [ 572 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 573 | ] } 574 | { "T":[4507046, 158798617], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 158850000] } 575 | { "T":[4507046, 158893106], "N":"core_repaint_begin", "wo":11 } 576 | { "T":[4507046, 159209385], "N":"core_flush_damage", "ws":12, "wo":11 } 577 | { "T":[4507046, 159553008], "N":"core_repaint_posted", "wo":11 } 578 | { "T":[4507046, 175416449], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 175494000] } 579 | { "T":[4507046, 175532995], "N":"core_repaint_exit_loop", "wo":11 } 580 | { "T":[4507046, 175782761], "N":"core_commit_damage", "ws":12 } 581 | { "T":[4507046, 175827959], "N":"core_repaint_req", "wo":11, 582 | "C": [ 583 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 584 | ] } 585 | { "T":[4507046, 175850116], "N":"core_repaint_enter_loop", "wo":11, 586 | "C": [ 587 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 588 | ] } 589 | { "T":[4507046, 192084156], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 192151000] } 590 | { "T":[4507046, 192173949], "N":"core_repaint_begin", "wo":11 } 591 | { "T":[4507046, 192437180], "N":"core_flush_damage", "ws":12, "wo":11 } 592 | { "T":[4507046, 192781244], "N":"core_repaint_posted", "wo":11 } 593 | { "T":[4507046, 208739130], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 208800000] } 594 | { "T":[4507046, 208863612], "N":"core_repaint_exit_loop", "wo":11 } 595 | { "T":[4507046, 209245144], "N":"core_commit_damage", "ws":12 } 596 | { "T":[4507046, 209303630], "N":"core_repaint_req", "wo":11, 597 | "C": [ 598 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 599 | ] } 600 | { "T":[4507046, 209327528], "N":"core_repaint_enter_loop", "wo":11, 601 | "C": [ 602 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 603 | ] } 604 | { "T":[4507046, 225386974], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 225450000] } 605 | { "T":[4507046, 225484648], "N":"core_repaint_begin", "wo":11 } 606 | { "T":[4507046, 225756060], "N":"core_flush_damage", "ws":12, "wo":11 } 607 | { "T":[4507046, 226220228], "N":"core_repaint_posted", "wo":11 } 608 | { "T":[4507046, 242070243], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 242100000] } 609 | { "T":[4507046, 242193480], "N":"core_repaint_exit_loop", "wo":11 } 610 | { "T":[4507046, 242518954], "N":"core_commit_damage", "ws":12 } 611 | { "T":[4507046, 242575890], "N":"core_repaint_req", "wo":11, 612 | "C": [ 613 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 614 | ] } 615 | { "T":[4507046, 242599803], "N":"core_repaint_enter_loop", "wo":11, 616 | "C": [ 617 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 618 | ] } 619 | { "T":[4507046, 258681419], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 258750000] } 620 | { "T":[4507046, 258753518], "N":"core_repaint_begin", "wo":11 } 621 | { "T":[4507046, 258951124], "N":"core_flush_damage", "ws":12, "wo":11 } 622 | { "T":[4507046, 259321061], "N":"core_repaint_posted", "wo":11 } 623 | { "T":[4507046, 275343563], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 275404000] } 624 | { "T":[4507046, 275467819], "N":"core_repaint_exit_loop", "wo":11 } 625 | { "T":[4507046, 275797070], "N":"core_commit_damage", "ws":12 } 626 | { "T":[4507046, 275855014], "N":"core_repaint_req", "wo":11, 627 | "C": [ 628 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 629 | ] } 630 | { "T":[4507046, 275878632], "N":"core_repaint_enter_loop", "wo":11, 631 | "C": [ 632 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 633 | ] } 634 | { "T":[4507046, 291983391], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 292050000] } 635 | { "T":[4507046, 292113983], "N":"core_repaint_begin", "wo":11 } 636 | { "T":[4507046, 292374420], "N":"core_flush_damage", "ws":12, "wo":11 } 637 | { "T":[4507046, 292718826], "N":"core_repaint_posted", "wo":11 } 638 | { "T":[4507046, 308640577], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 308702000] } 639 | { "T":[4507046, 308765871], "N":"core_repaint_exit_loop", "wo":11 } 640 | { "T":[4507046, 309097375], "N":"core_commit_damage", "ws":12 } 641 | { "T":[4507046, 309154698], "N":"core_repaint_req", "wo":11, 642 | "C": [ 643 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 644 | ] } 645 | { "T":[4507046, 309177914], "N":"core_repaint_enter_loop", "wo":11, 646 | "C": [ 647 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 648 | ] } 649 | { "T":[4507046, 325285232], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 325351000] } 650 | { "T":[4507046, 325382369], "N":"core_repaint_begin", "wo":11 } 651 | { "T":[4507046, 325653977], "N":"core_flush_damage", "ws":12, "wo":11 } 652 | { "T":[4507046, 325997188], "N":"core_repaint_posted", "wo":11 } 653 | { "T":[4507046, 341937828], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 342000000] } 654 | { "T":[4507046, 342101593], "N":"core_repaint_exit_loop", "wo":11 } 655 | { "T":[4507046, 342432414], "N":"core_commit_damage", "ws":12 } 656 | { "T":[4507046, 342491382], "N":"core_repaint_req", "wo":11, 657 | "C": [ 658 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 659 | ] } 660 | { "T":[4507046, 342515827], "N":"core_repaint_enter_loop", "wo":11, 661 | "C": [ 662 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 663 | ] } 664 | { "T":[4507046, 358576702], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 358649000] } 665 | { "T":[4507046, 358653111], "N":"core_repaint_begin", "wo":11 } 666 | { "T":[4507046, 358871505], "N":"core_flush_damage", "ws":12, "wo":11 } 667 | { "T":[4507046, 359238900], "N":"core_repaint_posted", "wo":11 } 668 | { "T":[4507046, 375241366], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 375301000] } 669 | { "T":[4507046, 375360400], "N":"core_repaint_exit_loop", "wo":11 } 670 | { "T":[4507046, 375683802], "N":"core_commit_damage", "ws":12 } 671 | { "T":[4507046, 375741250], "N":"core_repaint_req", "wo":11, 672 | "C": [ 673 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 674 | ] } 675 | { "T":[4507046, 375765273], "N":"core_repaint_enter_loop", "wo":11, 676 | "C": [ 677 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 678 | ] } 679 | { "T":[4507046, 391889391], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 391953000] } 680 | { "T":[4507046, 391983920], "N":"core_repaint_begin", "wo":11 } 681 | { "T":[4507046, 392286123], "N":"core_flush_damage", "ws":12, "wo":11 } 682 | { "T":[4507046, 392610699], "N":"core_repaint_posted", "wo":11 } 683 | { "T":[4507046, 408530212], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 408600000] } 684 | { "T":[4507046, 408651810], "N":"core_repaint_exit_loop", "wo":11 } 685 | { "T":[4507046, 408985486], "N":"core_commit_damage", "ws":12 } 686 | { "T":[4507046, 409088413], "N":"core_repaint_req", "wo":11, 687 | "C": [ 688 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 689 | ] } 690 | { "T":[4507046, 409113470], "N":"core_repaint_enter_loop", "wo":11, 691 | "C": [ 692 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 693 | ] } 694 | { "T":[4507046, 425128377], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 425240000] } 695 | { "T":[4507046, 425214012], "N":"core_repaint_begin", "wo":11 } 696 | { "T":[4507046, 425477890], "N":"core_flush_damage", "ws":12, "wo":11 } 697 | { "T":[4507046, 425817485], "N":"core_repaint_posted", "wo":11 } 698 | { "T":[4507046, 441838757], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 441902000] } 699 | { "T":[4507046, 441965532], "N":"core_repaint_exit_loop", "wo":11 } 700 | { "T":[4507046, 442335550], "N":"core_commit_damage", "ws":12 } 701 | { "T":[4507046, 442393820], "N":"core_repaint_req", "wo":11, 702 | "C": [ 703 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 704 | ] } 705 | { "T":[4507046, 442417137], "N":"core_repaint_enter_loop", "wo":11, 706 | "C": [ 707 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 708 | ] } 709 | { "T":[4507046, 458447379], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 458557000] } 710 | { "T":[4507046, 458517914], "N":"core_repaint_begin", "wo":11 } 711 | { "T":[4507046, 458773991], "N":"core_flush_damage", "ws":12, "wo":11 } 712 | { "T":[4507046, 459129092], "N":"core_repaint_posted", "wo":11 } 713 | { "T":[4507046, 475140895], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 475202000] } 714 | { "T":[4507046, 475266536], "N":"core_repaint_exit_loop", "wo":11 } 715 | { "T":[4507046, 475602314], "N":"core_commit_damage", "ws":12 } 716 | { "T":[4507046, 475663138], "N":"core_repaint_req", "wo":11, 717 | "C": [ 718 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 719 | ] } 720 | { "T":[4507046, 475687106], "N":"core_repaint_enter_loop", "wo":11, 721 | "C": [ 722 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 723 | ] } 724 | { "T":[4507046, 491789756], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 491852000] } 725 | { "T":[4507046, 491888714], "N":"core_repaint_begin", "wo":11 } 726 | { "T":[4507046, 492204852], "N":"core_flush_damage", "ws":12, "wo":11 } 727 | { "T":[4507046, 492550883], "N":"core_repaint_posted", "wo":11 } 728 | { "T":[4507046, 508440734], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 508503000] } 729 | { "T":[4507046, 508565672], "N":"core_repaint_exit_loop", "wo":11 } 730 | { "T":[4507046, 508895274], "N":"core_commit_damage", "ws":12 } 731 | { "T":[4507046, 508952551], "N":"core_repaint_req", "wo":11, 732 | "C": [ 733 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 734 | ] } 735 | { "T":[4507046, 508976288], "N":"core_repaint_enter_loop", "wo":11, 736 | "C": [ 737 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 738 | ] } 739 | { "T":[4507046, 525090256], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 525153000] } 740 | { "T":[4507046, 525185929], "N":"core_repaint_begin", "wo":11 } 741 | { "T":[4507046, 525459117], "N":"core_flush_damage", "ws":12, "wo":11 } 742 | { "T":[4507046, 525804215], "N":"core_repaint_posted", "wo":11 } 743 | { "T":[4507046, 541741955], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 541803000] } 744 | { "T":[4507046, 541864756], "N":"core_repaint_exit_loop", "wo":11 } 745 | { "T":[4507046, 542247422], "N":"core_commit_damage", "ws":12 } 746 | { "T":[4507046, 542305692], "N":"core_repaint_req", "wo":11, 747 | "C": [ 748 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 749 | ] } 750 | { "T":[4507046, 542329710], "N":"core_repaint_enter_loop", "wo":11, 751 | "C": [ 752 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 753 | ] } 754 | { "T":[4507046, 558361982], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 558445000] } 755 | { "T":[4507046, 558457509], "N":"core_repaint_begin", "wo":11 } 756 | { "T":[4507046, 558734108], "N":"core_flush_damage", "ws":12, "wo":11 } 757 | { "T":[4507046, 559109862], "N":"core_repaint_posted", "wo":11 } 758 | { "T":[4507046, 575073109], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 575103000] } 759 | { "T":[4507046, 575258821], "N":"core_repaint_exit_loop", "wo":11 } 760 | { "T":[4507046, 575585127], "N":"core_commit_damage", "ws":12 } 761 | { "T":[4507046, 575642736], "N":"core_repaint_req", "wo":11, 762 | "C": [ 763 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 764 | ] } 765 | { "T":[4507046, 575666303], "N":"core_repaint_enter_loop", "wo":11, 766 | "C": [ 767 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 768 | ] } 769 | { "T":[4507046, 591689072], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 591752000] } 770 | { "T":[4507046, 591786159], "N":"core_repaint_begin", "wo":11 } 771 | { "T":[4507046, 592105172], "N":"core_flush_damage", "ws":12, "wo":11 } 772 | { "T":[4507046, 592453686], "N":"core_repaint_posted", "wo":11 } 773 | { "T":[4507046, 608339805], "N":"core_repaint_finished", "wo":11, "vblank":[4507046, 608403000] } 774 | { "T":[4507046, 608464627], "N":"core_repaint_exit_loop", "wo":11 } 775 | { "T":[4507046, 608796050], "N":"core_commit_damage", "ws":12 } 776 | { "T":[4507046, 608854741], "N":"core_repaint_req", "wo":11, 777 | "C": [ 778 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 779 | ] } 780 | { "T":[4507046, 608878815], "N":"core_repaint_enter_loop", "wo":11, 781 | "C": [ 782 | { "f":"weston_surface_schedule_repaint", "l":1358, "ws":12 } 783 | ] } 784 | -------------------------------------------------------------------------------- /wesgr.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2014 Pekka Paalanen 3 | * 4 | * Permission to use, copy, modify, distribute, and sell this software and 5 | * its documentation for any purpose is hereby granted without fee, provided 6 | * that the above copyright notice appear in all copies and that both that 7 | * copyright notice and this permission notice appear in supporting 8 | * documentation, and that the name of the copyright holders not be used in 9 | * advertising or publicity pertaining to distribution of the software 10 | * without specific, written prior permission. The copyright holders make 11 | * no representations about the suitability of this software for any 12 | * purpose. It is provided "as is" without express or implied warranty. 13 | * 14 | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS 15 | * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 16 | * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY 17 | * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER 18 | * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF 19 | * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 20 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 | */ 22 | 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | #include 29 | 30 | #include "wesgr.h" 31 | 32 | struct bytebuf { 33 | uint8_t *data; 34 | size_t alloc; 35 | size_t len; 36 | size_t pos; 37 | }; 38 | 39 | static void 40 | bytebuf_init(struct bytebuf *bb) 41 | { 42 | bb->data = NULL; 43 | bb->alloc = 0; 44 | bb->len = 0; 45 | bb->pos = 0; 46 | } 47 | 48 | static void 49 | bytebuf_release(struct bytebuf *bb) 50 | { 51 | free(bb->data); 52 | bytebuf_init(bb); 53 | } 54 | 55 | static int 56 | bytebuf_ensure(struct bytebuf *bb, size_t sz) 57 | { 58 | uint8_t *data; 59 | 60 | if (bb->alloc >= sz) 61 | return 0; 62 | 63 | data = realloc(bb->data, sz); 64 | if (!data) 65 | return ERROR; 66 | 67 | bb->data = data; 68 | bb->alloc = sz; 69 | 70 | return 0; 71 | } 72 | 73 | static int 74 | bytebuf_read_from_file(struct bytebuf *bb, FILE *fp, size_t sz) 75 | { 76 | size_t ret; 77 | 78 | if (bytebuf_ensure(bb, sz) < 0) 79 | return ERROR; 80 | 81 | ret = fread(bb->data, 1, sz, fp); 82 | if (ferror(fp)) 83 | return ERROR; 84 | 85 | bb->len = ret; 86 | bb->pos = 0; 87 | 88 | return 0; 89 | } 90 | 91 | static int 92 | parse_file(const char *name, struct parse_context *ctx) 93 | { 94 | int ret = -1; 95 | struct bytebuf bb; 96 | FILE *fp; 97 | struct json_tokener *jtok; 98 | struct json_object *jobj; 99 | 100 | bytebuf_init(&bb); 101 | jtok = json_tokener_new(); 102 | if (!jtok) 103 | return ERROR; 104 | 105 | fp = fopen(name, "r"); 106 | if (!fp) 107 | goto out_release; 108 | 109 | while (1) { 110 | enum json_tokener_error jerr; 111 | int r; 112 | 113 | jobj = json_tokener_parse_ex(jtok, 114 | (char *)(bb.data + bb.pos), 115 | bb.len - bb.pos); 116 | jerr = json_tokener_get_error(jtok); 117 | if (!jobj && jerr == json_tokener_continue) { 118 | if (feof(fp)) { 119 | ret = 0; 120 | break; 121 | } 122 | 123 | if (bytebuf_read_from_file(&bb, fp, 8192) < 0) 124 | break; 125 | 126 | continue; 127 | } 128 | 129 | if (!jobj) { 130 | fprintf(stderr, "JSON parse failure: %d\n", jerr); 131 | break; 132 | } 133 | 134 | bb.pos += jtok->char_offset; 135 | 136 | r = parse_context_process_object(ctx, jobj); 137 | json_object_put(jobj); 138 | 139 | if (r < 0) { 140 | fprintf(stderr, "JSON interpretation error\n"); 141 | break; 142 | } 143 | } 144 | 145 | fclose(fp); 146 | 147 | if (ret != -1) 148 | ret = graph_data_end(ctx->gdata); 149 | 150 | out_release: 151 | bytebuf_release(&bb); 152 | json_tokener_free(jtok); 153 | 154 | if (ret == -1) 155 | return ERROR; 156 | return ret; 157 | } 158 | 159 | struct prog_args { 160 | int from_ms; 161 | int to_ms; 162 | const char *infile; 163 | const char *svgfile; 164 | }; 165 | 166 | static void 167 | print_usage(const char *prog) 168 | { 169 | printf("Usage:\n %s -i input.log -o output.svg [options]\n" 170 | "Arguments and options:\n" 171 | " -h, --help Print this help and exit.\n" 172 | " -i, --input=FILE Read FILE as the input data.\n" 173 | " -o, --output=FILE Write FILE as the output SVG.\n" 174 | " -a, --from-ms=MS Start the graph at MS milliseconds.\n" 175 | " -b, --to-ms=MS End the graph at MS milliseconds.\n", 176 | prog); 177 | } 178 | 179 | static int 180 | parse_opts(struct prog_args *args, int argc, char *argv[]) 181 | { 182 | static const char short_opts[] = "hi:a:b:o:"; 183 | static const struct option opts[] = { 184 | { "help", no_argument, 0, 'h' }, 185 | { "input", required_argument, 0, 'i' }, 186 | { "from-ms", required_argument, 0, 'a' }, 187 | { "to-ms", required_argument, 0, 'b' }, 188 | { "output", required_argument, 0, 'o' }, 189 | { NULL, 0, 0, 0 } 190 | }; 191 | 192 | while (1) { 193 | int c; 194 | int longindex; 195 | 196 | c = getopt_long(argc, argv, short_opts, opts, &longindex); 197 | if (c == -1) 198 | break; 199 | 200 | switch (c) { 201 | case '?': 202 | return -1; 203 | case 'h': 204 | print_usage(argv[0]); 205 | return -1; 206 | case 'i': 207 | args->infile = optarg; 208 | break; 209 | case 'a': 210 | args->from_ms = atoi(optarg); 211 | break; 212 | case 'b': 213 | args->to_ms = atoi(optarg); 214 | break; 215 | case 'o': 216 | args->svgfile = optarg; 217 | break; 218 | default: 219 | break; 220 | } 221 | } 222 | 223 | if (optind < argc) { 224 | fprintf(stderr, "Error, extra command line arguments:"); 225 | while (optind < argc) 226 | fprintf(stderr, " %s", argv[optind++]); 227 | fprintf(stderr, "\n"); 228 | 229 | return -1; 230 | } 231 | 232 | return 0; 233 | } 234 | 235 | int 236 | main(int argc, char *argv[]) 237 | { 238 | struct prog_args args = { -1, -1, NULL, NULL }; 239 | struct graph_data gdata; 240 | struct parse_context ctx; 241 | 242 | if (parse_opts(&args, argc, argv) < 0) 243 | return 1; 244 | 245 | if (!args.infile) { 246 | fprintf(stderr, "Error: input file not specified.\n"); 247 | return 1; 248 | } 249 | 250 | if (!args.svgfile) { 251 | fprintf(stderr, "Error: output file not specified.\n"); 252 | return 1; 253 | } 254 | 255 | if (graph_data_init(&gdata) < 0) 256 | return 1; 257 | 258 | if (parse_context_init(&ctx, &gdata) < 0) 259 | return 1; 260 | 261 | if (parse_file(args.infile, &ctx) < 0) 262 | return 1; 263 | 264 | if (graph_data_to_svg(&gdata, args.from_ms, args.to_ms, 265 | args.svgfile) < 0) 266 | return 1; 267 | 268 | parse_context_release(&ctx); 269 | graph_data_release(&gdata); 270 | 271 | return 0; 272 | } 273 | 274 | void 275 | generic_error(const char *file, int line, const char *func) 276 | { 277 | fprintf(stderr, "Error in %s(), %s:%d\n", func, file, line); 278 | } 279 | 280 | -------------------------------------------------------------------------------- /wesgr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2014 Pekka Paalanen 3 | * 4 | * Permission to use, copy, modify, distribute, and sell this software and 5 | * its documentation for any purpose is hereby granted without fee, provided 6 | * that the above copyright notice appear in all copies and that both that 7 | * copyright notice and this permission notice appear in supporting 8 | * documentation, and that the name of the copyright holders not be used in 9 | * advertising or publicity pertaining to distribution of the software 10 | * without specific, written prior permission. The copyright holders make 11 | * no representations about the suitability of this software for any 12 | * purpose. It is provided "as is" without express or implied warranty. 13 | * 14 | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS 15 | * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 16 | * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY 17 | * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER 18 | * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF 19 | * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 20 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 | */ 22 | 23 | #ifndef WESGR_H 24 | #define WESGR_H 25 | 26 | #include 27 | #include 28 | 29 | #define ARRAY_LENGTH(a) (sizeof(a) / sizeof((a)[0])) 30 | 31 | struct json_object; 32 | 33 | struct info_weston_output; 34 | struct info_weston_surface; 35 | 36 | struct update { 37 | struct timespec damage; 38 | struct timespec flush; 39 | struct timespec vblank; 40 | struct update *next; 41 | }; 42 | 43 | struct update_graph { 44 | struct update_graph *next; 45 | struct update *updates; 46 | const char *style; 47 | char *label; 48 | 49 | double y; 50 | 51 | struct update *need_vblank; 52 | }; 53 | 54 | struct activity { 55 | struct timespec begin; 56 | struct timespec end; 57 | struct activity *next; 58 | }; 59 | 60 | struct activity_set { 61 | struct activity *act; 62 | }; 63 | 64 | struct vblank { 65 | struct timespec ts; 66 | struct vblank *next; 67 | }; 68 | 69 | struct vblank_set { 70 | struct vblank *vbl; 71 | }; 72 | 73 | struct transition { 74 | struct timespec ts; 75 | struct transition *next; 76 | }; 77 | 78 | struct transition_set { 79 | struct transition *trans; 80 | const char *style; 81 | }; 82 | 83 | struct line_block { 84 | struct timespec begin; 85 | struct timespec end; 86 | const char *style; 87 | char *desc; 88 | struct line_block *next; 89 | }; 90 | 91 | struct line_graph { 92 | struct line_block *block; 93 | const char *style; 94 | const char *label; 95 | 96 | double y; 97 | }; 98 | 99 | struct output_graph { 100 | struct info_weston_output *info; 101 | struct output_graph *next; 102 | 103 | struct line_graph delay_line; 104 | struct line_graph submit_line; 105 | struct line_graph gpu_line; 106 | struct line_graph renderer_gpu_line; 107 | struct transition_set begins; 108 | struct transition_set posts; 109 | struct vblank_set vblanks; 110 | struct activity_set not_looping; 111 | struct update_graph *updates; 112 | 113 | double y1, y2; 114 | double title_y; 115 | 116 | struct timespec last_req; 117 | struct timespec last_finished; 118 | struct timespec last_begin; 119 | struct timespec last_posted; 120 | struct timespec last_exit_loop; 121 | struct timespec last_renderer_gpu_begin; 122 | }; 123 | 124 | struct graph_data { 125 | struct output_graph *output; 126 | 127 | struct timespec begin; 128 | struct timespec end; 129 | 130 | double time_axis_y; 131 | double legend_y; 132 | }; 133 | 134 | struct surface_graph_list { 135 | struct surface_graph_list *next; 136 | struct output_graph *output_gr; 137 | struct update_graph *update_gr; 138 | }; 139 | 140 | enum object_type { 141 | TYPE_WESTON_OUTPUT, 142 | TYPE_WESTON_SURFACE, 143 | }; 144 | 145 | struct info_weston_output { 146 | const char *name; 147 | struct output_graph *output_gr; 148 | }; 149 | 150 | struct info_weston_surface { 151 | char *description; 152 | 153 | struct update *open_update; 154 | struct surface_graph_list *glist; 155 | struct surface_graph_list *last; 156 | }; 157 | 158 | struct object_info { 159 | unsigned id; 160 | enum object_type type; 161 | struct json_object *jobj; 162 | union { 163 | struct info_weston_output wo; 164 | struct info_weston_surface ws; 165 | } info; 166 | }; 167 | 168 | struct lookup_table { 169 | unsigned id_base; 170 | void **array; 171 | unsigned alloc; 172 | }; 173 | 174 | struct parse_context { 175 | struct lookup_table idmap; 176 | struct graph_data *gdata; 177 | }; 178 | 179 | typedef int (*tp_handler_t)(struct parse_context *ctx, 180 | const struct timespec *ts, 181 | struct json_object *jobj); 182 | 183 | struct tp_handler_item { 184 | const char *tp_name; 185 | tp_handler_t func; 186 | }; 187 | 188 | extern const struct tp_handler_item tp_handler_list[]; 189 | 190 | int 191 | graph_data_init(struct graph_data *gdata); 192 | 193 | void 194 | graph_data_release(struct graph_data *gdata); 195 | 196 | int 197 | graph_data_end(struct graph_data *gdata); 198 | 199 | void 200 | graph_data_time(struct graph_data *gdata, const struct timespec *ts); 201 | 202 | int 203 | graph_data_to_svg(struct graph_data *gdata, int from_ms, int to_ms, 204 | const char *filename); 205 | 206 | int 207 | parse_context_init(struct parse_context *ctx, struct graph_data *gdata); 208 | 209 | void 210 | parse_context_release(struct parse_context *ctx); 211 | 212 | int 213 | parse_context_process_object(struct parse_context *ctx, 214 | struct json_object *jobj); 215 | 216 | struct object_info * 217 | get_object_info_from_timepoint(struct parse_context *ctx, 218 | struct json_object *jobj, const char *member); 219 | 220 | struct timespec 221 | get_timespec_from_timepoint(struct parse_context *ctx, 222 | struct json_object *jobj, const char *member); 223 | 224 | static inline void 225 | timespec_invalidate(struct timespec *ts) 226 | { 227 | ts->tv_nsec = -1; 228 | } 229 | 230 | static inline int 231 | timespec_is_valid(const struct timespec *ts) 232 | { 233 | return ts->tv_nsec >= 0; 234 | } 235 | 236 | void 237 | generic_error(const char *file, int line, const char *func); 238 | 239 | #define ERROR ({ generic_error(__FILE__, __LINE__, __func__); -1; }) 240 | #define ERROR_NULL ({ generic_error(__FILE__, __LINE__, __func__); NULL; }) 241 | 242 | #endif /* WESGR_H */ 243 | 244 | --------------------------------------------------------------------------------