/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2020, Google Inc.
 *
 * request.tp - Tracepoints for the request object
 */

#include <libcamera/framebuffer.h>

#include "libcamera/internal/request.h"

TRACEPOINT_EVENT_CLASS(
	libcamera,
	request,
	TP_ARGS(
		libcamera::Request *, req
	),
	TP_FIELDS(
		ctf_integer_hex(uintptr_t, request, reinterpret_cast<uintptr_t>(req))
		ctf_integer(uint64_t, cookie, req->cookie())
		ctf_enum(libcamera, request_status, uint32_t, status, req->status())
	)
)

TRACEPOINT_EVENT_INSTANCE(
	libcamera,
	request,
	request_construct,
	TP_ARGS(
		libcamera::Request *, req
	)
)

TRACEPOINT_EVENT_INSTANCE(
	libcamera,
	request,
	request_destroy,
	TP_ARGS(
		libcamera::Request *, req
	)
)

TRACEPOINT_EVENT_INSTANCE(
	libcamera,
	request,
	request_reuse,
	TP_ARGS(
		libcamera::Request *, req
	)
)

TRACEPOINT_EVENT_INSTANCE(
	libcamera,
	request,
	request_queue,
	TP_ARGS(
		libcamera::Request *, req
	)
)

TRACEPOINT_EVENT_INSTANCE(
	libcamera,
	request,
	request_device_queue,
	TP_ARGS(
		libcamera::Request *, req
	)
)

TRACEPOINT_EVENT_INSTANCE(
	libcamera,
	request,
	request_complete,
	TP_ARGS(
		libcamera::Request::Private *, req
	)
)

TRACEPOINT_EVENT_INSTANCE(
	libcamera,
	request,
	request_cancel,
	TP_ARGS(
		libcamera::Request::Private *, req
	)
)

TRACEPOINT_EVENT(
	libcamera,
	request_complete_buffer,
	TP_ARGS(
		libcamera::Request::Private *, req,
		libcamera::FrameBuffer *, buf
	),
	TP_FIELDS(
		ctf_integer_hex(uintptr_t, request, reinterpret_cast<uintptr_t>(req))
		ctf_integer(uint64_t, cookie, req->_o<libcamera::Request>()->cookie())
		ctf_integer(int, status, req->_o<libcamera::Request>()->status())
		ctf_integer_hex(uintptr_t, buffer, reinterpret_cast<uintptr_t>(buf))
		ctf_enum(libcamera, buffer_status, uint32_t, buf_status, buf->metadata().status)
	)
)
