Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d1aac753 authored by Mattias Agren's avatar Mattias Agren Committed by Andre Eisenbach
Browse files

Added missing A2DP priority on java alarm service

Running GKI timer engine via JAVA alarm service was causing severe
timer preemption at times which affects A2DP media task timer. This in
turn was stressing the compensation logic towards UIPC resulting in
very bursty reads of up to 40 UIPC frames at a time. This led to
instabilities on the UIPC pipe and trickled upwards in audio framework.
Inclusion of java alarm thread in A2DP high priority thread list results
in a much smoother data flow for entire A2DP data path and improved
audio quality.

Bug: 17520043
Change-Id: I7cea6ec64aa5b973b5fff767389a8827e681619e
parent 7b10d07e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -170,6 +170,7 @@ static void alarm_service_init()
    alarm_service.timer_started_us = 0;
    alarm_service.timer_last_expired_us = 0;
    alarm_service.wakelock = FALSE;
    raise_priority_a2dp(TASK_JAVA_ALARM);
}

/** Requests an alarm from AlarmService to fire when the next
+6 −1
Original line number Diff line number Diff line
@@ -209,7 +209,7 @@ static UINT32 a2dp_media_task_stack[(A2DP_MEDIA_TASK_STACK_SIZE + 3) / 4];
/* 18 frames is equivalent to 6.89*18*2.9 ~= 360 ms @ 44.1 khz, 20 ms mediatick */
#define MAX_OUTPUT_A2DP_FRAME_QUEUE_SZ 18
#define A2DP_PACKET_COUNT_LOW_WATERMARK 5
#define MAX_PCM_FRAME_NUM_PER_TICK     40
#define MAX_PCM_FRAME_NUM_PER_TICK     20
#define RESET_RATE_COUNTER_THRESHOLD_MS    2000

//#define BTIF_MEDIA_VERBOSE_ENABLED
@@ -2481,6 +2481,11 @@ static UINT8 btif_get_num_aa_frame(void)
            } else {
                result = 0;
            }

            /* smooth out the compensation over time to minimize burstiness towards UIPC */
            if (result > MAX_PCM_FRAME_NUM_PER_TICK)
                result = MAX_PCM_FRAME_NUM_PER_TICK;

            VERBOSE("WRITE %d FRAMES", result);
        }
        break;
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ typedef enum {
    TASK_HIGH_HCI_WORKER,
    TASK_HIGH_USERIAL_READ,
    TASK_UIPC_READ,
    TASK_JAVA_ALARM,
    TASK_HIGH_MAX
} tHIGH_PRIORITY_TASK;