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

Commit 5d29f49b authored by Chris Wailes's avatar Chris Wailes
Browse files

Quiet excessive logging of missing lambdas during preload

This patch will change the logging behavior in the Zygote such that
lambdas from the preload list that aren't found during Zygote
initialization will be counted and a summary provided at the end rather
than logging them each individually.  These missing lambdas will only be
logged for userdebug builds.

Test: Compared logs before and after
Bug: 163602260
Change-Id: I4cd11d626d7e4f365c55f8458aac20cd442638ed
Merged-In: I4cd11d626d7e4f365c55f8458aac20cd442638ed
parent 558a921d
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -86,9 +86,10 @@ import java.security.Security;
 */
public class ZygoteInit {

    // TODO (chriswailes): Change this so it is set with Zygote or ZygoteSecondary as appropriate
    private static final String TAG = "Zygote";

    private static final boolean LOGGING_DEBUG = Log.isLoggable(TAG, Log.DEBUG);

    private static final String PROPERTY_DISABLE_GRAPHICS_DRIVER_PRELOADING =
            "ro.zygote.disable_gl_preload";

@@ -284,6 +285,7 @@ public class ZygoteInit {
                    new BufferedReader(new InputStreamReader(is), Zygote.SOCKET_BUFFER_SIZE);

            int count = 0;
            int missingLambdaCount = 0;
            String line;
            while ((line = br.readLine()) != null) {
                // Skip comments and blank lines.
@@ -302,24 +304,33 @@ public class ZygoteInit {
                    Class.forName(line, true, null);
                    count++;
                } catch (ClassNotFoundException e) {
                    if (line.contains("$$Lambda$")) {
                        if (LOGGING_DEBUG) {
                            missingLambdaCount++;
                        }
                    } else {
                        Log.w(TAG, "Class not found for preloading: " + line);
                    }
                } catch (UnsatisfiedLinkError e) {
                    Log.w(TAG, "Problem preloading " + line + ": " + e);
                } catch (Throwable t) {
                    Log.e(TAG, "Error preloading " + line + ".", t);
                    if (t instanceof Error) {
                        throw (Error) t;
                    }
                    if (t instanceof RuntimeException) {
                    } else if (t instanceof RuntimeException) {
                        throw (RuntimeException) t;
                    }
                    } else {
                        throw new RuntimeException(t);
                    }
                }
                Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
            }

            Log.i(TAG, "...preloaded " + count + " classes in "
                    + (SystemClock.uptimeMillis() - startTime) + "ms.");
            if (LOGGING_DEBUG && missingLambdaCount != 0) {
                Log.i(TAG, "Unresolved lambda preloads: " + missingLambdaCount);
            }
        } catch (IOException e) {
            Log.e(TAG, "Error reading " + PRELOADED_CLASSES + ".", e);
        } finally {