Lines Matching refs:chunk
69 * A "chunk" of trace-events and corresponding timestamp buffer. As
79 /* The number of traces this chunk contains so far: */
99 bool last; /* this chunk is last in batch */
100 bool eof; /* this chunk is last in frame */
106 * one chunk should be designated to free the data.
119 struct u_trace_chunk *chunk,
151 struct u_trace_chunk *chunk,
220 struct u_trace_chunk *chunk,
276 struct u_trace_chunk *chunk = ptr;
278 chunk->utctx->delete_timestamp_buffer(chunk->utctx, chunk->timestamps);
280 /* Unref payloads attached to this chunk. */
282 u_vector_foreach(payload, &chunk->payloads)
284 u_vector_finish(&chunk->payloads);
286 list_del(&chunk->node);
287 free(chunk);
294 struct u_trace_chunk *chunk = list_first_entry(chunks,
296 free_chunk(chunk);
303 struct u_trace_chunk *chunk;
307 /* do we currently have a non-full chunk to append msgs to? */
309 chunk = list_last_entry(&ut->trace_chunks,
311 /* Can we store a new trace in the chunk? */
312 if (chunk->num_traces < TRACES_PER_CHUNK) {
315 return chunk;
319 if (chunk->payload &&
320 (chunk->payload->end - chunk->payload->next) >= payload_size)
321 return chunk;
326 struct u_trace_payload_buf **buf = u_vector_add(&chunk->payloads);
328 chunk->payload = *buf;
329 return chunk;
331 /* we need to expand to add another chunk to the batch, so
334 chunk->last = false;
338 chunk = calloc(1, sizeof(*chunk));
340 chunk->utctx = ut->utctx;
341 chunk->timestamps = ut->utctx->create_timestamp_buffer(ut->utctx, TIMESTAMP_BUF_SIZE);
342 chunk->last = true;
343 u_vector_init(&chunk->payloads, 4, sizeof(struct u_trace_payload_buf *));
345 struct u_trace_payload_buf **buf = u_vector_add(&chunk->payloads);
347 chunk->payload = *buf;
350 list_addtail(&chunk->node, &ut->trace_chunks);
352 return chunk;
482 struct u_trace_chunk *chunk = job;
483 struct u_trace_context *utctx = chunk->utctx;
493 /* For first chunk of batch, accumulated times will be zerod: */
501 for (unsigned idx = 0; idx < chunk->num_traces; idx++) {
502 const struct u_trace_event *evt = &chunk->traces[idx];
507 uint64_t ns = utctx->read_timestamp(utctx, chunk->timestamps, idx, chunk->flush_data);
525 utctx->out_printer->event(utctx, chunk, evt, ns, delta);
529 evt->tp->perfetto(utctx->pctx, ns, chunk->flush_data, evt->payload);
536 if (chunk->last) {
546 if (chunk->eof) {
554 if (chunk->free_flush_data && utctx->delete_flush_data) {
555 utctx->delete_flush_data(utctx, chunk->flush_data);
578 struct u_trace_chunk *chunk = list_first_entry(chunks,
581 /* remove from list before enqueuing, because chunk is freed
584 list_delinit(&chunk->node);
586 util_queue_add_job(&utctx->queue, chunk, &chunk->fence,
647 * chunks, "sanitize" it to include the first chunk.
652 if (iter.ut && !iter.chunk && !list_is_empty(&iter.ut->trace_chunks)) {
653 iter.chunk = list_first_entry(&iter.ut->trace_chunks, struct
667 a.chunk == b.chunk &&
681 struct u_trace_chunk *from_chunk = begin_it.chunk;
684 while (from_chunk != end_it.chunk || from_idx != end_it.event_idx) {
689 if (from_chunk == end_it.chunk)
717 if (from_chunk == end_it.chunk)
733 struct u_trace_chunk *current_chunk = begin_it.chunk;
736 while(current_chunk != end_it.chunk) {
755 struct u_trace_chunk *chunk = get_chunk(ut, tp->payload_sz);
756 unsigned tp_idx = chunk->num_traces++;
763 payload = chunk->payload->next;
764 chunk->payload->next += tp->payload_sz;
768 ut->utctx->record_timestamp(ut, cs, chunk->timestamps, tp_idx, tp->end_of_pipe);
770 chunk->traces[tp_idx] = (struct u_trace_event) {
781 list_for_each_entry(struct u_trace_chunk, chunk, &ut->trace_chunks, node) {
782 chunk->flush_data = flush_data;
783 chunk->free_flush_data = false;