Lines Matching defs:utctx

77    struct u_trace_context *utctx;
112 void (*start)(struct u_trace_context *utctx);
113 void (*end)(struct u_trace_context *utctx);
114 void (*start_of_frame)(struct u_trace_context *utctx);
115 void (*end_of_frame)(struct u_trace_context *utctx);
116 void (*start_of_batch)(struct u_trace_context *utctx);
117 void (*end_of_batch)(struct u_trace_context *utctx);
118 void (*event)(struct u_trace_context *utctx,
125 print_txt_start(struct u_trace_context *utctx)
131 print_txt_end_of_frame(struct u_trace_context *utctx)
133 fprintf(utctx->out, "END OF FRAME %u\n", utctx->frame_nr);
137 print_txt_start_of_batch(struct u_trace_context *utctx)
139 fprintf(utctx->out, "+----- NS -----+ +-- Δ --+ +----- MSG -----\n");
143 print_txt_end_of_batch(struct u_trace_context *utctx)
145 uint64_t elapsed = utctx->last_time_ns - utctx->first_time_ns;
146 fprintf(utctx->out, "ELAPSED: %"PRIu64" ns\n", elapsed);
150 print_txt_event(struct u_trace_context *utctx,
156 fprintf(utctx->out, "%016"PRIu64" %+9d: %s: ", ns, delta, evt->tp->name);
157 evt->tp->print(utctx->out, evt->payload);
159 fprintf(utctx->out, "%016"PRIu64" %+9d: %s\n", ns, delta, evt->tp->name);
174 print_json_start(struct u_trace_context *utctx)
176 fprintf(utctx->out, "[\n");
180 print_json_end(struct u_trace_context *utctx)
182 fprintf(utctx->out, "\n]");
186 print_json_start_of_frame(struct u_trace_context *utctx)
188 if (utctx->frame_nr != 0)
189 fprintf(utctx->out, ",\n");
190 fprintf(utctx->out, "{\n\"frame\": %u,\n", utctx->frame_nr);
191 fprintf(utctx->out, "\"batches\": [\n");
195 print_json_end_of_frame(struct u_trace_context *utctx)
197 fprintf(utctx->out, "]\n}\n");
198 fflush(utctx->out);
202 print_json_start_of_batch(struct u_trace_context *utctx)
204 if (utctx->batch_nr != 0)
205 fprintf(utctx->out, ",\n");
206 fprintf(utctx->out, "{\n\"events\": [\n");
210 print_json_end_of_batch(struct u_trace_context *utctx)
212 uint64_t elapsed = utctx->last_time_ns - utctx->first_time_ns;
213 fprintf(utctx->out, "],\n");
214 fprintf(utctx->out, "\"duration_ns\": %"PRIu64"\n", elapsed);
215 fprintf(utctx->out, "}\n");
219 print_json_event(struct u_trace_context *utctx,
224 if (utctx->event_nr != 0)
225 fprintf(utctx->out, ",\n");
226 fprintf(utctx->out, "{\n\"event\": \"%s\",\n", evt->tp->name);
227 fprintf(utctx->out, "\"time_ns\": \"%016"PRIu64"\",\n", ns);
228 fprintf(utctx->out, "\"params\": {");
230 evt->tp->print_json(utctx->out, evt->payload);
231 fprintf(utctx->out, "}\n}\n");
278 chunk->utctx->delete_timestamp_buffer(chunk->utctx, chunk->timestamps);
340 chunk->utctx = ut->utctx;
341 chunk->timestamps = ut->utctx->create_timestamp_buffer(ut->utctx, TIMESTAMP_BUF_SIZE);
381 queue_init(struct u_trace_context *utctx)
383 if (utctx->queue.jobs)
386 bool ret = util_queue_init(&utctx->queue, "traceq", 256, 1,
392 utctx->out = NULL;
396 u_trace_context_init(struct u_trace_context *utctx,
404 utctx->pctx = pctx;
405 utctx->create_timestamp_buffer = create_timestamp_buffer;
406 utctx->delete_timestamp_buffer = delete_timestamp_buffer;
407 utctx->record_timestamp = record_timestamp;
408 utctx->read_timestamp = read_timestamp;
409 utctx->delete_flush_data = delete_flush_data;
411 utctx->last_time_ns = 0;
412 utctx->first_time_ns = 0;
413 utctx->frame_nr = 0;
414 utctx->batch_nr = 0;
415 utctx->event_nr = 0;
416 utctx->start_of_frame = true;
418 list_inithead(&utctx->flushed_trace_chunks);
420 utctx->out = get_tracefile();
424 utctx->out_printer = &json_printer;
426 utctx->out_printer = &txt_printer;
430 list_add(&utctx->node, &ctx_list);
433 if (!u_trace_context_actively_tracing(utctx))
436 queue_init(utctx);
438 if (utctx->out) {
439 utctx->out_printer->start(utctx);
444 u_trace_context_fini(struct u_trace_context *utctx)
447 list_del(&utctx->node);
450 if (utctx->out) {
451 utctx->out_printer->end(utctx);
452 fflush(utctx->out);
455 if (!utctx->queue.jobs)
457 util_queue_finish(&utctx->queue);
458 util_queue_destroy(&utctx->queue);
459 free_chunks(&utctx->flushed_trace_chunks);
466 list_for_each_entry (struct u_trace_context, utctx, &ctx_list, node)
467 queue_init(utctx);
483 struct u_trace_context *utctx = chunk->utctx;
485 if (utctx->start_of_frame) {
486 utctx->start_of_frame = false;
487 utctx->batch_nr = 0;
488 if (utctx->out) {
489 utctx->out_printer->start_of_frame(utctx);
494 if (!utctx->last_time_ns) {
495 utctx->event_nr = 0;
496 if (utctx->out) {
497 utctx->out_printer->start_of_batch(utctx);
507 uint64_t ns = utctx->read_timestamp(utctx, chunk->timestamps, idx, chunk->flush_data);
510 if (!utctx->first_time_ns)
511 utctx->first_time_ns = ns;
514 delta = utctx->last_time_ns ? ns - utctx->last_time_ns : 0;
515 utctx->last_time_ns = ns;
520 ns = utctx->last_time_ns;
524 if (utctx->out) {
525 utctx->out_printer->event(utctx, chunk, evt, ns, delta);
529 evt->tp->perfetto(utctx->pctx, ns, chunk->flush_data, evt->payload);
533 utctx->event_nr++;
537 if (utctx->out) {
538 utctx->out_printer->end_of_batch(utctx);
541 utctx->batch_nr++;
542 utctx->last_time_ns = 0;
543 utctx->first_time_ns = 0;
547 if (utctx->out) {
548 utctx->out_printer->end_of_frame(utctx);
550 utctx->frame_nr++;
551 utctx->start_of_frame = true;
554 if (chunk->free_flush_data && utctx->delete_flush_data) {
555 utctx->delete_flush_data(utctx, chunk->flush_data);
566 u_trace_context_process(struct u_trace_context *utctx, bool eof)
568 struct list_head *chunks = &utctx->flushed_trace_chunks;
586 util_queue_add_job(&utctx->queue, chunk, &chunk->fence,
594 u_trace_init(struct u_trace *ut, struct u_trace_context *utctx)
596 ut->utctx = utctx;
598 ut->enabled = u_trace_context_instrumenting(utctx);
692 copy_ts_buffer(begin_it.ut->utctx, cmdstream,
768 ut->utctx->record_timestamp(ut, cs, chunk->timestamps, tp_idx, tp->end_of_pipe);
793 list_splicetail(&ut->trace_chunks, &ut->utctx->flushed_trace_chunks);