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

Commit f3f2204c authored by Sharvil Nanavati's avatar Sharvil Nanavati Committed by Android (Google) Code Review
Browse files

Merge "DO NOT MERGE ANYWHERE Don't clear the btsnoop log ringbuffer on compress." into cw-e-dev

parents c21b534a 8c7e36a3
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -97,15 +97,16 @@ static bool btsnoop_compress(ringbuffer_t *rb_dst, ringbuffer_t *rb_src) {
  uint8_t block_src[BLOCK_SIZE];
  uint8_t block_dst[BLOCK_SIZE];

  while (ringbuffer_size(rb_src) > 0) {
    zs.avail_in = ringbuffer_pop(rb_src, block_src, BLOCK_SIZE);
  const size_t num_blocks = (ringbuffer_size(rb_src) + BLOCK_SIZE - 1) / BLOCK_SIZE;
  for (size_t i = 0; i < num_blocks; ++i) {
    zs.avail_in = ringbuffer_peek(rb_src, i * BLOCK_SIZE, block_src, BLOCK_SIZE);
    zs.next_in = block_src;

    do {
      zs.avail_out = BLOCK_SIZE;
      zs.next_out = block_dst;

      int err = deflate(&zs, ringbuffer_size(rb_src) == 0 ? Z_FINISH : Z_NO_FLUSH);
      int err = deflate(&zs, (i == num_blocks - 1) ? Z_FINISH : Z_NO_FLUSH);
      if (err == Z_STREAM_ERROR) {
        rc = false;
        break;
+5 −4
Original line number Diff line number Diff line
@@ -47,10 +47,11 @@ size_t ringbuffer_size(const ringbuffer_t *rb);
// is full.
size_t ringbuffer_insert(ringbuffer_t *rb, const uint8_t *p, size_t length);

// Peek |length| number of bytes from the ringbuffer into the buffer |p|
// Return the actual number of bytes peeked. Can be less than |length| if
// there is less than |length| data available.
size_t ringbuffer_peek(const ringbuffer_t *rb, uint8_t *p, size_t length);
// Peek |length| number of bytes from the ringbuffer, starting at |offset|,
// into the buffer |p|. Return the actual number of bytes peeked. Can be less
// than |length| if there is less than |length| data available. |offset| must
// be non-negative.
size_t ringbuffer_peek(const ringbuffer_t *rb, off_t offset, uint8_t *p, size_t length);

// Does the same as |ringbuffer_peek|, but also advances the ring buffer head
size_t ringbuffer_pop(ringbuffer_t *rb, uint8_t *p, size_t length);
+8 −7
Original line number Diff line number Diff line
@@ -94,28 +94,29 @@ size_t ringbuffer_delete(ringbuffer_t *rb, size_t length) {
  return length;
}

size_t ringbuffer_peek(const ringbuffer_t *rb, uint8_t *p, size_t length) {
size_t ringbuffer_peek(const ringbuffer_t *rb, off_t offset, uint8_t *p, size_t length) {
  assert(rb);
  assert(p);
  assert(offset >= 0);
  assert((size_t)offset <= ringbuffer_size(rb));

  uint8_t *b = rb->head;
  size_t copied = 0;
  uint8_t *b = ((rb->head - rb->base + offset) % rb->total) + rb->base;
  const size_t bytes_to_copy = (offset + length > ringbuffer_size(rb)) ? ringbuffer_size(rb) - offset : length;

  while (copied < length && copied < ringbuffer_size(rb)) {
  for (size_t copied = 0; copied < bytes_to_copy; ++copied) {
    *p++ = *b++;
    if (b >= (rb->base + rb->total))
      b = rb->base;
    ++copied;
  }

  return copied;
  return bytes_to_copy;
}

size_t ringbuffer_pop(ringbuffer_t *rb, uint8_t *p, size_t length) {
  assert(rb);
  assert(p);

  const size_t copied = ringbuffer_peek(rb, p, length);
  const size_t copied = ringbuffer_peek(rb, 0, p, length);
  rb->head += copied;
  if (rb->head >= (rb->base + rb->total))
    rb->head -= rb->total;
+4 −4
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ TEST(RingbufferTest, test_insert_basic) {
  EXPECT_EQ(6, ringbuffer_available(rb));

  uint8_t peek[10] = {0};
  size_t peeked = ringbuffer_peek(rb, peek, 10);
  size_t peeked = ringbuffer_peek(rb, 0, peek, 10);
  EXPECT_EQ(10, ringbuffer_size(rb)); // Ensure size doesn't change
  EXPECT_EQ(6, ringbuffer_available(rb));
  EXPECT_EQ(10, peeked);
@@ -48,7 +48,7 @@ TEST(RingbufferTest, test_insert_full) {
  EXPECT_EQ(0, ringbuffer_available(rb));
  EXPECT_EQ(5, ringbuffer_size(rb));

  size_t peeked = ringbuffer_peek(rb, peek, 5);
  size_t peeked = ringbuffer_peek(rb, 0, peek, 5);
  EXPECT_EQ(5, peeked);
  EXPECT_EQ(0, ringbuffer_available(rb));
  EXPECT_EQ(5, ringbuffer_size(rb));
@@ -78,7 +78,7 @@ TEST(RingbufferTest, test_multi_insert_delete) {

  uint8_t content[] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB};
  uint8_t peek[16] = {0};
  size_t peeked = ringbuffer_peek(rb, peek, 16);
  size_t peeked = ringbuffer_peek(rb, 0, peek, 16);
  EXPECT_EQ(13, peeked);
  ASSERT_TRUE(0 == memcmp(content, peek, peeked));

@@ -96,7 +96,7 @@ TEST(RingbufferTest, test_multi_insert_delete) {
  EXPECT_EQ(14, ringbuffer_size(rb));

  uint8_t content2[] = {0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xCC, 0xCC};
  peeked = ringbuffer_peek(rb, peek, 7);
  peeked = ringbuffer_peek(rb, 0, peek, 7);
  EXPECT_EQ(7, peeked);
  ASSERT_TRUE(0 == memcmp(content2, peek, peeked));