יצרני המכשירים צריכים לספק פרופיל צריכת חשמל של רכיבים בפורמט
/frameworks/base/core/res/res/xml/power_profile.xml
.
כדי לקבוע את הערכים של פרופילי צריכת חשמל, צריך להשתמש בחומרה שמודדת את צריכת החשמל של המכשיר ולבצע את הפעולות השונות שנדרש לגביהן מידע. מודדים את צריכת החשמל במהלך הפעולות האלה ומחשבים את הערכים (מפיקים את ההבדלים משימושים אחרים בבסיס צריכת החשמל, לפי הצורך).
המטרה של פרופיל צריכת החשמל היא להעריך את ניקוז הסוללה בצורה מדויקת, ולכן הערכים של פרופיל צריכת החשמל מוצגים בזרם (אמפר). במסגרת Android, המערכת מכפילה את הזרם בזמן שבו מערכת המשנה הייתה פעילה ומחשבת את ערך ה-mAh, שמשמש להערכת כמות הסוללה שנוצלה על ידי האפליקציה או מערכת המשנה.
מכשירים עם בקרים של Bluetooth, מודם ו-Wi-Fi שמריצים Android 7.0 ומעלה יכולים לספק ערכי הספק נוספים שהתקבלו מנתוני ערכת השבבים.
מכשירים עם מעבדים הטרוגניים
פרופיל ההספק למכשירים עם ליבות CPU של ארכיטקטורה הטרוגנית חייב לכלול את השדות הנוספים הבאים:
- המספר הכולל של מעבדים (CPU) לכל אשכול (מופיע כ-cpu.clusters.cores).
- מהירויות המעבד שנתמכות בכל אשכול.
- צריכת חשמל פעילה של CPU לכל אשכול.
כדי להבדיל בין צריכת חשמל פעילה של מעבד לבין מהירויות מעבד נתמכות באשכולות, מוסיפים את מספר האשכול לשם המערך. מספרי האשכולות מוקצים לפי סדר ליבות ה-CPU בעץ המכשירים של ליבת המערכת. לדוגמה, בארכיטקטורה הטרוגנית עם שני (2) אשכולות וארבע (4) ליבות:
- cluster0 מורכב מ-cpu0-3
- cluster1 מורכב מ-cpu4-7
מספרי ליבות ה-CPU האלה משמשים את מסגרת Android כשהיא קוראת נתונים סטטיסטיים מקובצי sysfs
במיקום: /sys/devices/system/cpu/cpu<number>/cpufreq/stats
.
דוגמה למעבדים ולמהירויות של אשכול:
<array name="cpu.active.cluster0"> <value>200</value> <value>300</value> <value>400</value> </array> <array name="cpu.speeds.cluster0"> <value>600000</value> <value>800000</value> <value>1200000</value> </array> <array name="cpu.active.cluster1"> <value>400</value> <value>500</value> <value>600</value> </array> <array name="cpu.speeds.cluster1"> <value>800000</value> <value>1200000</value> <value>1400000</value> </array>
ערכי עוצמה
בטבלה הבאה מתוארות הגדרות עוצמת האור הזמינות. כדי לראות את קובץ הדוגמה ב-AOSP, אפשר לעיין ב-power_profile.xml.
שם | תיאור | ערך לדוגמה | פתקים |
---|---|---|---|
ambient.on | יותר חשמל נצרך כשהמסך במצב שינה, במצב סביבה או במצב 'תמיד פעיל' במקום במצב כבוי. | בסביבות 100 mA | - |
screen.on | צריכת חשמל נוספת כשהמסך מופעל בבהירות מינימלית. | 200 mA | כולל בקר מגע ותאורה אחורית של המסך. בבהירות 0, לא בבהירות המינימלית של Android, שהיא בדרך כלל 10% או 20%. |
screen.full | הספק נוסף שמשמש כשהמסך בבהירות מקסימלית, בהשוואה למסך בבהירות מינימלית. | 100 mA-300 mA | חלק מהערך הזה (בהתאם לבהירות המסך) מתווסף לערך screen.on כדי לחשב את צריכת החשמל של המסך. |
wifi.on | הספק נוסף שמשמש כשה-Wi-Fi מופעל אבל לא מקבל, משדר או סורק. | 2 mA | - |
wifi.active | צריכת חשמל נוספת בזמן שידור או קבלה דרך Wi-Fi. | 31 mA | - |
wifi.scan | צריכת חשמל נוספת בזמן סריקת נקודות גישה ל-Wi-Fi. | 100 mA | - |
אודיו | צריכת חשמל נוספת כשמפענחים או מקודדים אודיו באמצעות DSP. | בסביבות 10 mA | משמש לאודיו של DSP. |
סרטון | צריכת חשמל נוספת כשמפענחים סרטון באמצעות DSP. | בסביבות 50 mA | משמש לסרטונים ב-DSP. |
camera.avg | ממוצע צריכת החשמל על ידי מערכת המשנה של המצלמה באפליקציית מצלמה טיפוסית. | 600 mA | הערכה גסה של אפליקציה שמריצה תצוגה מקדימה ומצלמת בערך 10 תמונות ברזולוציה מלאה בכל דקה. |
camera.flashlight | ההספק הממוצע שמשמש את מודול הפלאש של המצלמה כשהוא פועל. | 200 mA | - |
gps.signalqualitybased | הסוללה נגמרת מהר יותר בגלל השימוש ב-GPS, בהתאם לעוצמת האות. זהו ערך מרובה, אחד לכל עוצמת אות, מהחלש ביותר לחזק ביותר. | 30 mA, 10 mA | - |
gps.on | צריכת חשמל נוספת בזמן ש-GPS מחפש אות. | 50 mA | - |
radio.active | צריכת חשמל נוספת בזמן שידור או קליטה של רדיו סלולרי. | 100 mA-300 mA | - |
radio.scanning | צריכת חשמל נוספת בזמן שהרדיו הסלולרי שולח אותות זימון למגדל. | 1.2 mA | - |
radio.on | צריכת חשמל נוספת כשהרדיו הסלולרי מופעל. זהו ערך מרובה, אחד לכל עוצמת אות (ללא אות, חלשה, בינונית, חזקה). | 1.2 mA | חלק ממכשירי הרדיו מגבירים את עוצמת השידור כשהם מחפשים אנטנה סלולרית ולא מזהים אות. הערכים יכולים להיות זהים או לרדת ככל שעוצמת האות עולה. אם תספקו רק ערך אחד, אותו ערך ישמש לכל רמות החוזק. אם תספקו שני ערכים, הראשון ישמש למצב ללא אות, השני ישמש לכל שאר העוצמות וכן הלאה. |
bluetooth.controller.idle | הזרם הממוצע (במיליאמפר) שצורך בקר ה-Bluetooth כשהוא לא פעיל. | - | הערכים האלה לא משוערים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה מצבי קבלה או שידור, המערכת מחשבת את הממוצע של המצבים האלה. בנוסף, המערכת אוספת עכשיו נתונים לגבי סריקות Bluetooth וסריקות של Bluetooth עם צריכת אנרגיה נמוכה (LE). ב-Android מגרסה 7.0 ואילך, המערכת לא משתמשת יותר בערכי ההספק של Bluetooth עבור bluetooth.active (הערך שבו נעשה שימוש כשמפעילים אודיו באמצעות Bluetooth A2DP) ועבור bluetooth.on (הערך שבו נעשה שימוש כש-Bluetooth מופעל אבל לא פעיל). |
bluetooth.controller.rx | הזרם הממוצע (במיליאמפר) של בקר ה-Bluetooth בזמן קבלה. | - | |
bluetooth.controller.tx | צריכת הזרם הממוצעת (mA) של בקר ה-Bluetooth בזמן השידור. | - | |
bluetooth.controller.voltage | מתח הפעולה הממוצע (mV) של בקר ה-Bluetooth. | - | |
modem.controller.sleep | הזרם הממוצע (במיליאמפר) שהבקר של המודם צורך כשהוא במצב שינה. | 0 mA | הערכים האלה לא משוערים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה מצבי קבלה, המערכת מחשבת את הממוצע שלהם. אם יש כמה מצבי שידור, אפשר לציין ערך לכל מצב שידור החל מ-Android 9. |
modem.controller.idle | הצריכה הממוצעת של הזרם (mA) של בקר המודם במצב לא פעיל. | - | |
modem.controller.rx | צריכת הזרם הממוצעת (במיליאמפר) של בקר המודם בזמן קליטה. | - | |
modem.controller.tx | צריכת הזרם הממוצעת (mA) של בקר המודם בזמן שידור ברמות שונות של הספק RF (הספק תדר רדיו). זהו ערך מרובה עם ערך אחד לכל רמת עוצמת שידור. | 100 mA, 200 mA, 300 mA, 400 mA, 500 mA | |
modem.controller.voltage | מתח הפעלה ממוצע (mV) של בקר המודם. | - | |
wifi.controller.idle | הצריכה הממוצעת של הזרם (mA) של בקר ה-Wi-Fi במצב לא פעיל. | - | הערכים האלה לא משוערים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה מצבי קבלה או שידור, המערכת מחשבת את הממוצע של המצבים האלה. |
wifi.controller.rx | הזרם הממוצע (במיליאמפר) של בקר ה-Wi-Fi בזמן הקבלה. | - | |
wifi.controller.tx | הצריכה הממוצעת של זרם (mA) של בקר ה-Wi-Fi בזמן השידור. | - | |
wifi.controller.voltage | מתח הפעלה ממוצע (mV) של בקר ה-Wi-Fi. | - | |
cpu.speeds | זהו ערך מרובה שכולל רשימה של כל מהירויות המעבד האפשריות בקילוהרץ (KHz). | 125,000 KHz, 250,000 KHz, 500,000 KHz, 1,000,000 KHz, 1,500,000 KHz | המספר והסדר של הערכים צריכים להתאים לערכים של mA ב-cpu.active. |
cpu.idle | הספק כולל שהמערכת צורכת כשהמעבדים (ו-SoC) נמצאים במצב השעיה של המערכת. | 3 mA | - |
cpu.awake | שימוש נוסף בחשמל כשהמעבדים נמצאים במצב המתנה מתוזמן (kernel idle loop); המערכת לא נמצאת במצב השעיה. | 50 mA | יכול להיות שבפלטפורמה שלכם נעשה שימוש ביותר ממצב סרק אחד עם רמות שונות של צריכת חשמל. בחרו מצב סרק מייצג לתקופות ארוכות יותר של סרק בתזמון (כמה אלפיות שנייה). בודקים את תרשים ההספק בציוד המדידה ובוחרים דגימות שבהן צריכת המעבד היא הנמוכה ביותר, ומתעלמים מדגימות גבוהות יותר שבהן המעבד יצא ממצב המתנה. |
cpu.active | הספק נוסף שמעבדים צורכים כשהם פועלים במהירויות שונות. | 100 mA, 120 mA, 140 mA, 160 mA, 200 mA | הערך מייצג את ההספק שמשמש את מסילות ה-CPU כשהן פועלות במהירויות שונות. מגדירים את המהירות המקסימלית בקרנל לכל אחת מהמהירויות המותרות, ומצמידים את המעבד (CPU) למהירות הזו. המספר והסדר של הרשומות תואמים למספר ולסדר של הרשומות ב-cpu.speeds. |
cpu.clusters.cores | מספר ליבות המעבד בכל אשכול מעבדים. | 4, 2 | ההגדרה נדרשת רק למכשירים עם ארכיטקטורות הטרוגניות של מעבדים. מספר הרשומות והסדר שלהן צריכים להיות זהים למספר הרשומות של האשכולות עבור cpu.active ו-cpu.speeds. הערך הראשון מייצג את מספר ליבות ה-CPU ב-cluster0, הערך השני מייצג את מספר ליבות ה-CPU ב-cluster1 וכן הלאה. |
battery.capacity | קיבולת הסוללה הכוללת במיליאמפר לשעה. | 3,000 mAh | - |
סריקות Bluetooth ו-LE
במכשירים עם Android 7.0, המערכת אוספת נתונים לסריקות של Bluetooth עם צריכת אנרגיה נמוכה (LE) ולתעבורת רשת של Bluetooth (כמו RFCOMM ו-L2CAP), ומשייכת את הפעילויות האלה לאפליקציה שהפעילה אותן. סריקות Bluetooth משויכות לאפליקציה שהפעילה את הסריקה, אבל סריקות אצווה לא משויכות (אלא משויכות לאפליקציית Bluetooth). אם אפליקציה סורקת במשך N אלפיות שנייה, העלות של הסריקה היא N אלפיות שנייה של זמן קבלה (rx) ו-N אלפיות שנייה של זמן שידור (tx). כל הזמן שנותר לבקר מוקצה לתעבורת רשת או לאפליקציית Bluetooth.