perfetto: try to fix CTS (part 3)
Bug: 70524267
Change-Id: Iefd4cc800514f7a3ebb96afc16ea1dbe53408375
diff --git a/test/cts/end_to_end_integrationtest_cts.cc b/test/cts/end_to_end_integrationtest_cts.cc
index 4ee3f56..787be39 100644
--- a/test/cts/end_to_end_integrationtest_cts.cc
+++ b/test/cts/end_to_end_integrationtest_cts.cc
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-#include <gtest/gtest.h>
+#include <random>
+#include "gtest/gtest.h"
#include "perfetto/trace/test_event.pbzero.h"
#include "perfetto/trace/trace_packet.pb.h"
#include "perfetto/trace/trace_packet.pbzero.h"
#include "perfetto/traced/traced.h"
#include "perfetto/tracing/core/trace_packet.h"
-
#include "test/fake_consumer.h"
namespace perfetto {
@@ -30,7 +30,6 @@
protected:
void TestMockProducer(const std::string& producer_name) {
base::TestTaskRunner task_runner;
- auto finish = task_runner.CreateCheckpoint("no.more.packets");
// Setup the trace config.
TraceConfig trace_config;
@@ -41,26 +40,33 @@
ds_config->set_name(producer_name);
ds_config->set_target_buffer(0);
+ // The parameters for the producer.
+ static constexpr uint32_t kRandomSeed = 42;
+ static constexpr uint32_t kEventCount = 10;
+
+ // Setup the test to use a random number generator.
+ ds_config->mutable_for_testing()->set_seed(kRandomSeed);
+ ds_config->mutable_for_testing()->set_message_count(kEventCount);
+
+ // Create the random generator with the same seed.
+ std::minstd_rand0 rnd_engine(kRandomSeed);
+
// Setip the function.
uint64_t total = 0;
- auto function = [&total, &finish](std::vector<TracePacket> packets,
- bool has_more) {
- if (has_more) {
- for (auto& packet : packets) {
- packet.Decode();
- ASSERT_TRUE(packet->has_for_testing());
- // ASSERT_EQ(protos::TracePacket::kTrustedUid,
- // packet->optional_trusted_uid_case());
- ASSERT_EQ(packet->for_testing().str(), "test");
- }
- total += packets.size();
+ auto finish = task_runner.CreateCheckpoint("no.more.packets");
+ auto function = [&total, &finish, &rnd_engine](
+ std::vector<TracePacket> packets, bool has_more) {
+ for (auto& packet : packets) {
+ ASSERT_TRUE(packet.Decode());
+ ASSERT_TRUE(packet->has_for_testing());
+ ASSERT_EQ(protos::TracePacket::kTrustedUid,
+ packet->optional_trusted_uid_case());
+ ASSERT_EQ(packet->for_testing().seq_value(), rnd_engine());
+ }
+ total += packets.size();
- // TODO(lalitm): renable this when stiching inside the service is
- // present.
- // ASSERT_FALSE(packets->empty());
- } else {
- ASSERT_EQ(total, 10u);
- ASSERT_TRUE(packets.empty());
+ if (!has_more) {
+ ASSERT_EQ(total, kEventCount);
finish();
}
};
@@ -73,7 +79,7 @@
// and the consumer tries to retrieve it. For now wait a bit until the
// service is done, but we should add explicit flushing to avoid this.
task_runner.PostDelayedTask([&consumer]() { consumer.ReadTraceData(); },
- 2500);
+ 5000);
task_runner.RunUntilCheckpoint("no.more.packets", 10000);
}
diff --git a/test/cts/producer/AndroidManifest.xml b/test/cts/producer/AndroidManifest.xml
index 6924a9a..6139dca 100755
--- a/test/cts/producer/AndroidManifest.xml
+++ b/test/cts/producer/AndroidManifest.xml
@@ -17,6 +17,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.perfetto.producer">
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+
<application>
<activity android:name=".ProducerActivity" >
<intent-filter>
diff --git a/test/cts/producer/res/mipmap-hdpi/ic_launcher.png b/test/cts/producer/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..7e5732c
--- /dev/null
+++ b/test/cts/producer/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/test/cts/producer/res/mipmap-mdpi/ic_launcher.png b/test/cts/producer/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..8fc5d07
--- /dev/null
+++ b/test/cts/producer/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/test/cts/producer/res/mipmap-xhdpi/ic_launcher.png b/test/cts/producer/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..0bef6d9
--- /dev/null
+++ b/test/cts/producer/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/test/cts/producer/res/mipmap-xxhdpi/ic_launcher.png b/test/cts/producer/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..7144af0
--- /dev/null
+++ b/test/cts/producer/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/test/cts/producer/res/mipmap-xxxhdpi/ic_launcher.png b/test/cts/producer/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..2dbbdfc
--- /dev/null
+++ b/test/cts/producer/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/test/cts/producer/src/android/perfetto/producer/ProducerActivity.java b/test/cts/producer/src/android/perfetto/producer/ProducerActivity.java
index 2dfa0ce..1eedfe3 100644
--- a/test/cts/producer/src/android/perfetto/producer/ProducerActivity.java
+++ b/test/cts/producer/src/android/perfetto/producer/ProducerActivity.java
@@ -17,48 +17,49 @@
package android.perfetto.producer;
import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
public class ProducerActivity extends Activity {
- private boolean paused = true;
- private final Handler handler = new Handler();
@Override
public void onResume() {
super.onResume();
- paused = false;
- handler.post(new Runnable() {
- @Override
+ NotificationManager manager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ NotificationChannel serviceChannel =
+ new NotificationChannel("service", "service", NotificationManager.IMPORTANCE_LOW);
+ serviceChannel.setDescription("Perfetto service");
+ serviceChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
+ manager.createNotificationChannel(serviceChannel);
+
+ NotificationChannel isolatedChannel = new NotificationChannel(
+ "isolated_service", "isolated_service", NotificationManager.IMPORTANCE_LOW);
+ isolatedChannel.setDescription("Perfetto isolated service");
+ isolatedChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
+ manager.createNotificationChannel(isolatedChannel);
+
+ startForegroundService(new Intent(ProducerActivity.this, ProducerService.class));
+ startForegroundService(new Intent(ProducerActivity.this, ProducerIsolatedService.class));
+
+ System.loadLibrary("perfettocts_jni");
+ new Thread(new Runnable() {
public void run() {
- if (paused) {
- return;
+ try {
+ setupProducer();
+ } catch (Exception ex) {
+ ex.printStackTrace();
}
-
- startService(new Intent(ProducerActivity.this, ProducerService.class));
- startService(new Intent(ProducerActivity.this, ProducerIsolatedService.class));
-
- System.loadLibrary("perfettocts_jni");
- new Thread(new Runnable() {
- public void run() {
- try {
- setupProducer();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- })
- .start();
}
- });
- }
-
- @Override
- public void onPause() {
- super.onPause();
- paused = true;
+ })
+ .start();
}
private static native void setupProducer();
diff --git a/test/cts/producer/src/android/perfetto/producer/ProducerIsolatedService.java b/test/cts/producer/src/android/perfetto/producer/ProducerIsolatedService.java
index cde5c32..9f26f54 100644
--- a/test/cts/producer/src/android/perfetto/producer/ProducerIsolatedService.java
+++ b/test/cts/producer/src/android/perfetto/producer/ProducerIsolatedService.java
@@ -16,13 +16,23 @@
package android.perfetto.producer;
+import android.app.Notification;
import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
public class ProducerIsolatedService extends Service {
+ private static final int NOTIFICATION_ID = 123;
+
@Override
public void onCreate() {
+ Notification.Builder builder = new Notification.Builder(this, "isolated_service");
+ builder.setContentTitle("Perfetto isolated service")
+ .setContentText("Perfetto isolated service")
+ .setSmallIcon(R.mipmap.ic_launcher);
+
+ startForeground(NOTIFICATION_ID, builder.build());
+
System.loadLibrary("perfettocts_jni");
new Thread(new Runnable() {
@Override
diff --git a/test/cts/producer/src/android/perfetto/producer/ProducerService.java b/test/cts/producer/src/android/perfetto/producer/ProducerService.java
index f649ddc..a86267a 100644
--- a/test/cts/producer/src/android/perfetto/producer/ProducerService.java
+++ b/test/cts/producer/src/android/perfetto/producer/ProducerService.java
@@ -16,13 +16,22 @@
package android.perfetto.producer;
+import android.app.Notification;
import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
public class ProducerService extends Service {
+ private static final int NOTIFICATION_ID = 456;
+
@Override
public void onCreate() {
+ Notification.Builder builder = new Notification.Builder(this, "service");
+ builder.setContentTitle("Perfetto service")
+ .setContentText("Perfetto service")
+ .setSmallIcon(R.mipmap.ic_launcher);
+ startForeground(NOTIFICATION_ID, builder.build());
+
System.loadLibrary("perfettocts_jni");
new Thread(new Runnable() {
@Override