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

Commit 12c4ba42 authored by Dan Sandler's avatar Dan Sandler
Browse files

Developer QS tile: GPU Profiling.

Bug: 27872042
Change-Id: Ia57005df15572b1714af2a3a8cd5b9794fdfb165
parent 3bd52ddf
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -2916,11 +2916,21 @@

        <!-- Quick Settings tiles for Developer Options -->
        <service
                android:name=".qstile.ShowLayout"
                android:name=".qstile.DevelopmentTiles$ShowLayout"
                android:label="@string/debug_layout"
                android:icon="@drawable/tile_icon_show_layout"
                android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
                android:enabled="true">
                android:enabled="false">
            <intent-filter>
                <action android:name="android.service.quicksettings.action.QS_TILE" />
            </intent-filter>
        </service>
        <service
                android:name=".qstile.DevelopmentTiles$GPUProfiling"
                android:label="@string/track_frame_time"
                android:icon="@drawable/tile_icon_graphics"
                android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
                android:enabled="false">
            <intent-filter>
                <action android:name="android.service.quicksettings.action.QS_TILE" />
            </intent-filter>
+52 −0
Original line number Diff line number Diff line
<!--
Copyright (C) 2015 The Android Open Source Project

   Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FFFFFFFF"
        android:pathData="M23,1v22H1V1H23 M24,0H0v24h24V0L24,0z"/>
    <path
        android:strokeColor="#FFFFFFFF"
        android:strokeWidth="0.667"
        android:pathData="M5,19L1,23"/>
    <path
        android:strokeColor="#FFFFFFFF"
        android:strokeWidth="0.667"
        android:pathData="M1,1L5,5"/>
    <path
        android:strokeColor="#FFFFFFFF"
        android:strokeWidth="0.667"
        android:pathData="M19,5L23,1"/>
    <path
        android:strokeColor="#FFFFFFFF"
        android:strokeWidth="0.667"
        android:pathData="M19,19L23,23"/>
    <path
        android:fillColor="#FFFFFFFF"
        android:pathData="M14,3.8l-4,0l-0.2,-0.8l4.4,0z"/>
    <path
        android:fillColor="#FFFFFFFF"
        android:pathData="M18.8,5.2v13.5H5.2V5.2H18.8 M19.5,4.5h-15v15h15V4.5L19.5,4.5z"/>
    <path
        android:fillColor="#FFFFFFFF"
        android:pathData="M6.5,9.5h5v11h-5z"/>
    <path
        android:fillColor="#FFFFFFFF"
        android:pathData="M12.5,16.5h5v5h-5z"/>
</vector>
+7 −4
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ import com.android.settings.notification.ZenModeSettings;
import com.android.settings.notification.ZenModeVisualInterruptionSettings;
import com.android.settings.print.PrintJobSettingsFragment;
import com.android.settings.print.PrintSettingsFragment;
import com.android.settings.qstile.DevelopmentTiles;
import com.android.settings.search.DynamicIndexableContentMonitor;
import com.android.settings.search.Index;
import com.android.settings.sim.SimSettings;
@@ -1067,12 +1068,14 @@ public class SettingsActivity extends SettingsDrawerActivity
                pm.hasSystemFeature(PackageManager.FEATURE_PRINTING), isAdmin, pm);

        final boolean showDev = mDevelopmentPreferences.getBoolean(
                DevelopmentSettings.PREF_SHOW,
                android.os.Build.TYPE.equals("eng"));
                    DevelopmentSettings.PREF_SHOW, android.os.Build.TYPE.equals("eng"))
                && !um.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
        setTileEnabled(new ComponentName(packageName,
                        Settings.DevelopmentSettingsActivity.class.getName()),
                showDev && !um.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES),
                isAdmin, pm);
                showDev, isAdmin, pm);

        // Reveal development-only quick settings tiles
        DevelopmentTiles.setTilesEnabled(this, showDev);

        if (UserHandle.MU_ENABLED && !isAdmin) {
            // When on restricted users, disable all extra categories (but only the settings ones).
+95 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.android.settings.qstile;

import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.SystemProperties;
import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
import android.view.ThreadedRenderer;
import android.view.View;
import com.android.settings.DevelopmentSettings;

public class DevelopmentTiles {
    // List of components that need to be enabled when developer tools are turned on
    static final Class[] TILE_CLASSES = new Class[] {
            ShowLayout.class,
            GPUProfiling.class,
    };
    public static void setTilesEnabled(Context context, boolean enable) {
        final PackageManager pm = context.getPackageManager();
        for (Class cls : TILE_CLASSES) {
            pm.setComponentEnabledSetting(new ComponentName(context, cls),
                    enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                           : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
                    PackageManager.DONT_KILL_APP);
        }
    }

    /**
     * Tile to control the "Show layout bounds" developer setting
     */
    public static class ShowLayout extends TileService {
        @Override
        public void onStartListening() {
            super.onStartListening();
            refresh();
        }

        public void refresh() {
            final boolean enabled = SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false);
            getQsTile().setState(enabled ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
            getQsTile().updateTile();
        }

        @Override
        public void onClick() {
            SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY,
                    getQsTile().getState() == Tile.STATE_INACTIVE ? "true" : "false");
            new DevelopmentSettings.SystemPropPoker().execute(); // Settings app magic
            refresh();
        }
    }

    /**
     * Tile to control the "GPU profiling" developer setting
     */
    public static class GPUProfiling extends TileService {
        @Override
        public void onStartListening() {
            super.onStartListening();
            refresh();
        }

        public void refresh() {
            final String value = SystemProperties.get(ThreadedRenderer.PROFILE_PROPERTY);
            getQsTile().setState(value.equals("visual_bars")
                    ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
            getQsTile().updateTile();
        }

        @Override
        public void onClick() {
            SystemProperties.set(ThreadedRenderer.PROFILE_PROPERTY,
                    getQsTile().getState() == Tile.STATE_INACTIVE ? "visual_bars" : "");
            new DevelopmentSettings.SystemPropPoker().execute(); // Settings app magic
            refresh();
        }
    }
}
 No newline at end of file
+0 −46
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.android.settings.qstile;

import android.os.SystemProperties;
import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
import android.view.View;
import com.android.settings.DevelopmentSettings;

public class ShowLayout extends TileService {
    @Override
    public void onStartListening() {
        super.onStartListening();
        refresh();
    }

    public void refresh() {
        getQsTile().setState(
            SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false)
                ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
        getQsTile().updateTile();
    }

    @Override
    public void onClick() {
        SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY,
                getQsTile().getState() == Tile.STATE_INACTIVE ? "true" : "false");
        new DevelopmentSettings.SystemPropPoker().execute(); // Settings app magic
        refresh();
    }
}