@ -515,8 +515,6 @@ Status BufferQueueProducer::QueueBuffer(s32 slot, const QueueBufferInput& input,
slots [ slot ] . buffer_state = BufferState : : Queued ;
+ + core - > frame_counter ;
slots [ slot ] . frame_number = core - > frame_counter ;
slots [ slot ] . queue_time = timestamp ;
slots [ slot ] . presentation_time = 0 ;
item . acquire_called = slots [ slot ] . acquire_called ;
item . graphic_buffer = slots [ slot ] . graphic_buffer ;
@ -549,15 +547,6 @@ Status BufferQueueProducer::QueueBuffer(s32 slot, const QueueBufferInput& input,
// mark it as freed
if ( core - > StillTracking ( * front ) ) {
slots [ front - > slot ] . buffer_state = BufferState : : Free ;
// Mark tracked buffer history records as free
for ( auto & buffer_history_record : core - > buffer_history ) {
if ( buffer_history_record . frame_number = = front - > frame_number ) {
buffer_history_record . state = BufferState : : Free ;
break ;
}
}
// Reset the frame number of the freed buffer so that it is the first in line to
// be dequeued again
slots [ front - > slot ] . frame_number = 0 ;
@ -571,7 +560,6 @@ Status BufferQueueProducer::QueueBuffer(s32 slot, const QueueBufferInput& input,
}
}
core - > PushHistory ( core - > frame_counter , slots [ slot ] . queue_time , slots [ slot ] . presentation_time , BufferState : : Queued ) ;
core - > buffer_has_been_queued = true ;
core - > SignalDequeueCondition ( ) ;
output - > Inflate ( core - > default_width , core - > default_height , core - > transform_hint ,
@ -822,10 +810,6 @@ Status BufferQueueProducer::SetPreallocatedBuffer(s32 slot,
return Status : : NoError ;
}
Kernel : : KReadableEvent * BufferQueueProducer : : GetNativeHandle ( u32 type_id ) {
return & buffer_wait_event - > GetReadableEvent ( ) ;
}
void BufferQueueProducer : : Transact ( u32 code , std : : span < const u8 > parcel_data ,
std : : span < u8 > parcel_reply , u32 flags ) {
// Values used by BnGraphicBufferProducer onTransact
@ -945,49 +929,9 @@ void BufferQueueProducer::Transact(u32 code, std::span<const u8> parcel_data,
status = SetBufferCount ( buffer_count ) ;
break ;
}
case TransactionId : : GetBufferHistory : {
LOG_DEBUG ( Service_Nvnflinger , " called, transaction=GetBufferHistory " ) ;
const s32 request = parcel_in . Read < s32 > ( ) ;
if ( request < = 0 ) {
parcel_out . Write ( Status : : BadValue ) ;
parcel_out . Write < s32 > ( 0 ) ;
break ;
}
constexpr u32 history_max = BufferQueueCore : : BUFFER_HISTORY_SIZE ;
std : : array < BufferHistoryInfo , history_max > buffer_history_snapshot { } ;
s32 valid_index { } ;
{
std : : scoped_lock lk ( core - > mutex ) ;
const u32 current_history_pos = core - > buffer_history_pos ;
u32 index_reversed { } ;
for ( u32 i = 0 ; i < history_max ; + + i ) {
// Wrap values backwards e.g. 7, 6, 5, etc. in the range of 0-7
index_reversed = ( current_history_pos + history_max - i ) % history_max ;
const auto & current_history_buffer = core - > buffer_history [ index_reversed ] ;
// Here we use the frame number as a terminator.
// Because a buffer without frame_number is not considered complete
if ( current_history_buffer . frame_number = = 0 ) {
break ;
}
buffer_history_snapshot [ valid_index ] = current_history_buffer ;
+ + valid_index ;
}
}
const s32 limit = std : : min ( request , valid_index ) ;
parcel_out . Write ( Status : : NoError ) ;
parcel_out . Write < s32 > ( limit ) ;
for ( s32 i = 0 ; i < limit ; + + i ) {
parcel_out . Write ( buffer_history_snapshot [ i ] ) ;
}
case TransactionId : : GetBufferHistory :
LOG_WARNING ( Service_Nvnflinger , " (STUBBED) called, transaction=GetBufferHistory " ) ;
break ;
}
default :
ASSERT_MSG ( false , " Unimplemented TransactionId {} " , code ) ;
break ;
@ -1000,5 +944,8 @@ void BufferQueueProducer::Transact(u32 code, std::span<const u8> parcel_data,
( std : : min ) ( parcel_reply . size ( ) , serialized . size ( ) ) ) ;
}
Kernel : : KReadableEvent * BufferQueueProducer : : GetNativeHandle ( u32 type_id ) {
return & buffer_wait_event - > GetReadableEvent ( ) ;
}
} // namespace Service::android