Home | History | Annotate | Download | only in perf

Lines Matching refs:chunk

67  * A "chunk" of trace-events and corresponding timestamp buffer.  As
77 /* The number of traces this chunk contains so far: */
97 bool last; /* this chunk is last in batch */
98 bool eof; /* this chunk is last in frame */
104 * one chunk should be designated to free the data.
141 struct u_trace_chunk *chunk = ptr;
143 chunk->utctx->delete_timestamp_buffer(chunk->utctx, chunk->timestamps);
145 /* Unref payloads attached to this chunk. */
147 u_vector_foreach(payload, &chunk->payloads)
149 u_vector_finish(&chunk->payloads);
151 list_del(&chunk->node);
152 free(chunk);
159 struct u_trace_chunk *chunk = list_first_entry(chunks,
161 free_chunk(chunk);
168 struct u_trace_chunk *chunk;
172 /* do we currently have a non-full chunk to append msgs to? */
174 chunk = list_last_entry(&ut->trace_chunks,
176 /* Can we store a new trace in the chunk? */
177 if (chunk->num_traces < TRACES_PER_CHUNK) {
180 return chunk;
184 if (chunk->payload &&
185 (chunk->payload->end - chunk->payload->next) >= payload_size)
186 return chunk;
191 struct u_trace_payload_buf **buf = u_vector_add(&chunk->payloads);
193 chunk->payload = *buf;
194 return chunk;
196 /* we need to expand to add another chunk to the batch, so
199 chunk->last = false;
203 chunk = calloc(1, sizeof(*chunk));
205 chunk->utctx = ut->utctx;
206 chunk->timestamps = ut->utctx->create_timestamp_buffer(ut->utctx, TIMESTAMP_BUF_SIZE);
207 chunk->last = true;
208 u_vector_init(&chunk->payloads, 4, sizeof(struct u_trace_payload_buf *));
210 struct u_trace_payload_buf **buf = u_vector_add(&chunk->payloads);
212 chunk->payload = *buf;
215 list_addtail(&chunk->node, &ut->trace_chunks);
217 return chunk;
324 struct u_trace_chunk *chunk = job;
325 struct u_trace_context *utctx = chunk->utctx;
327 /* For first chunk of batch, accumulated times will be zerod: */
332 for (unsigned idx = 0; idx < chunk->num_traces; idx++) {
333 const struct u_trace_event *evt = &chunk->traces[idx];
338 uint64_t ns = utctx->read_timestamp(utctx, chunk->timestamps, idx, chunk->flush_data);
365 evt->tp->perfetto(utctx->pctx, ns, chunk->flush_data, evt->payload);
370 if (chunk->last) {
380 if (chunk->free_flush_data && utctx->delete_flush_data) {
381 utctx->delete_flush_data(utctx, chunk->flush_data);
384 if (utctx->out && chunk->eof) {
408 struct u_trace_chunk *chunk = list_first_entry(chunks,
411 /* remove from list before enqueuing, because chunk is freed
414 list_delinit(&chunk->node);
416 util_queue_add_job(&utctx->queue, chunk, &chunk->fence,
475 a.chunk == b.chunk &&
486 struct u_trace_chunk *from_chunk = begin_it.chunk;
489 while (from_chunk != end_it.chunk || from_idx != end_it.event_idx) {
494 if (from_chunk == end_it.chunk)
522 if (from_chunk == end_it.chunk)
535 struct u_trace_chunk *current_chunk = begin_it.chunk;
538 while(current_chunk != end_it.chunk) {
557 struct u_trace_chunk *chunk = get_chunk(ut, tp->payload_sz);
564 payload = chunk->payload->next;
565 chunk->payload->next += tp->payload_sz;
569 ut->utctx->record_timestamp(ut, cs, chunk->timestamps, chunk->num_traces);
571 chunk->traces[chunk->num_traces] = (struct u_trace_event) {
576 chunk->num_traces++;
584 chunk, &ut->trace_chunks, node) {
585 chunk->flush_data = flush_data;
586 chunk->free_flush_data = false;