chore: استيراد أولي من سيرو (ecfe7568) — بلا أي تعديل

نسخة كاملة من مستودع سيرو عند ecfe7568 لتكون أساس تطبيق «انطلق».
نُسخ المتعقَّب في git فقط (12,509 ملفاً / 302 م.ب) بـ git archive، لا
`cp -r` — فاستُثنيت تلقائياً مخلفات البناء (build · node_modules ·
.dart_tool · .gradle · Pods ≈ 10.7 غ.ب) وكل ما يستثنيه .gitignore.

هذا الكوميت **بلا أي تعديل عمداً** حتى يكون كل ما يليه فرقاً مقروءاً
مقابل سيرو الأصلي. سيرو نفسه لم يُمسّ.

⚠️ لا يبني بعد: `.env` و`lib/env/env.g.dart` غير متعقَّبين في سيرو (وهذا
صحيح — أسرار لكل مستأجر). كل تطبيق فلاتر هنا يحتاج .env خاصاً بانطلق ثم
توليد env.g.dart عبر build_runner. لا تُنسخ أسرار سيرو.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hamza-Ayed
2026-07-27 05:10:29 +03:00
co-authored by Claude Opus 5
commit 92dc6b3641
3654 changed files with 896478 additions and 0 deletions
+420
View File
@@ -0,0 +1,420 @@
# تحليل استهلاك البطارية وأداء التطبيق — سيرو
## Battery & Performance Analysis — Siro Platform
> **النسخة:** 1.0 | **تاريخ:** يوليو 2026 | **التصنيف:** داخلي
---
## 📋 فهرس المحتويات
1. [ملخص الأداء العام](#1-ملخص-الأداء-العام)
2. [تحليل استهلاك البطارية بالتفصيل](#2-تحليل-استهلاك-البطارية-بالتفصيل)
3. [نظام GPS المتكيف](#3-نظام-gps-المتكيف)
4. [تحسين الذاكرة والأداء](#4-تحسين-الذاكرة-والأداء)
5. [تحسين الشبكة والاتصالات](#5-تحسين-الشبكة-والاتصالات)
6. [تصنيف فئات الأجهزة](#6-تصنيف-فئات-الأجهزة)
7. [الخدمات الخلفية (Background Services)](#7-الخدمات-الخلفية)
8. [نقاط الضعف والتوصيات](#8-نقاط-الضعف-والتوصيات)
9. [خطة التحسين المقترحة](#9-خطة-التحسين-المقترحة)
---
## 1. ملخص الأداء العام
### التقييم الإجمالي: ⭐⭐⭐⭐☆ (8/10)
| المجال | التقييم | ملاحظات |
|--------|---------|---------|
| استهلاك البطارية (GPS) | ⭐⭐⭐⭐☆ | نظام متكيف جيد، يحتاج تحسينات |
| استهلاك البطارية (خلفية) | ⭐⭐⭐⭐⭐ | معماري ممتاز — لا GPS في الخلفية |
| سرعة التطبيق | ⭐⭐⭐⭐☆ | GetX سريع، لكن بدء التشغيل بطيء |
| استهلاك الذاكرة | ⭐⭐⭐⭐☆ | Lazy loading، Buffer limits |
| حجم التطبيق | ⭐⭐⭐☆☆ | كبير نسبياً (Flutter + حزم كثيرة) |
| الشبكة والاتصالات | ⭐⭐⭐⭐⭐ | Caching ممتاز، Socket ذكي |
| الخدمات الخلفية | ⭐⭐⭐⭐⭐ | Foreground Service محسن |
---
## 2. تحليل استهلاك البطارية بالتفصيل
### 2.1 الحزم المستخدمة
| الحزمة | الاستخدام | التأثير على البطارية |
|---------|-----------|----------------------|
| `battery_plus: ^7.0.0` | مراقبة مستوى البطارية | 🟢 Minimal |
| `wakelock_plus:` | إبقاء الشاشة قيد التشغيل | 🟡 مشغل دائم — يحتاج تحسين |
| `flutter_background_service: ^5.1.0` | خدمة الخلفية | 🟢 محسّن بشكل معماري |
| `location: ^8.0.0` | تتبع GPS | 🟡 عالي لكن مع تحسينات |
| `native_geofence: ^1.1.0` | Geofencing | 🟢 Hardware-level — ممتاز |
### 2.2 أوضاع استهلاك الطاقة
#### الوضع الطبيعي (بطارية > 25%)
```
GPS Interval: 5 ثوانٍ
Distance Filter: 10 متر
Upload Batch: كل دقيقتين
Record Timer: كل 3 ثوانٍ
Heartbeat: كل 25 ثانية (يتخطى إذا GPS نشط)
WakeLock: مفعل
```
#### وضع توفير الطاقة (بطارية ≤ 20%)
```
GPS Interval: 10 ثوانٍ ← توفير 50%
Distance Filter: 20 متر ← توفير 50%
Upload Batch: كل 5 دقائق ← توفير 60%
Record Timer: كل 10 ثوانٍ ← توفير 70%
Heartbeat: كل 25 ثانية
WakeLock: مفعل (بدون تغيير)
يدخل تلقائياً عند 20%، يخرج عند 25%
```
### 2.3 تأثير كل تقنية على البطارية
| التقنية | الوضع الطبيعي | توفير الطاقة | التوفير |
|---------|---------------|---------------|---------|
| GPS Polling | 5s | 10s | ~40% أقل استهلاك |
| Distance Filter | 10m | 20m | ~30% أقل تحديثات |
| Upload Frequency | 2min | 5min | ~60% أقل طلبات |
| Record Frequency | 3s | 10s | ~70% أقل تسجيل |
| Heartbeat | 25s | 25s | يتخطى إذا GPS نشط |
---
## 3. نظام GPS المتكيف
### 3.1 خوارزمية التحكم بالموقع (LocationController)
- **841 سطر** — ملف التحكم الرئيسي بالموقع
- **Single Source of Truth**: لا يوجد مصدر آخر للموقع في التطبيق
- **Background Service بدون GPS**: قاعدة معمارية صارمة — الخدمة الخلفية تشغل Socket فقط
### 3.2 تسجيل المسار الذكي
```dart
// يُسجل فقط إذا:
// 1. تحرك أكثر من 10 أمتار AND سرعة > 0.5 م/ث
// 2. أو مر 60 ثانية بدون تسجيل (force record)
if ((moved && speed > 0.5) || timeForced) {
_trackBuffer.add(point);
}
```
### 3.3 Batch Upload
```
Buffer: يخزن حتى 500 نقطة
Upload: كل 2-5 دقائق (حسب وضع الطاقة)
Batch Size: حتى 100 نقطة لكل طلب
SQLite: Flush كل 10 نقاط سلوكية
```
### 3.4 Heartbeat الذكي
```dart
// Heartbeat كل 25 ثانية، لكن:
// إذا GPS stream نشط → يتخطى Heartbeat بالكامل
if (_locSub != null) return; // Skip if GPS stream is active
```
### 3.5 Socket Watchdog
```dart
// فحص الاتصال كل 3 ثوانٍ
// يعيد الاتصال فقط إذا انقطع
// يمنع إعادة اتصال متزامنة
if (!isSocketConnected && !_isInitializingSocket) {
initSocket();
}
```
### 3.6 إدارة دورة حياة التطبيق
```dart
// عندما التطبيق في المقدمة → يوقف Background Service
// عندما التطبيق في الخلفية → يشغل Background Service
// iOS: لا يشغل Background Service أبداً
```
---
## 4. تحسين الذاكرة والأداء
### 4.1 GetX Lazy Loading
```dart
// Permanent (في الذاكرة دائماً):
Get.put(LocaleController());
Get.put(MapSocketController(), permanent: true);
Get.put(MapEngineController(), permanent: true);
// Lazy (ينشأ عند أول استخدام فقط):
Get.lazyPut(() => LoginController(), fenix: true);
Get.lazyPut(() => NotificationController(), fenix: true);
Get.lazyPut(() => VoiceCallController(), fenix: true);
```
### 4.2 Buffer Limits
```
Track Buffer: حد أقصى 500 نقطة (يحذف الأقدم)
Behavior Buffer: Flush إلى SQLite كل 10 نقاط
Error Log: Debounce دقيقة واحدة لنفس الخطأ
Image Upload: ضغط 70% + حد أقصى 1024x1024
Map Icons: تصغير إلى 120x120 في Isolate منفصل
```
### 4.3 Caching
| البيانات | مكان التخزين | مدة الصلاحية |
|----------|--------------|--------------|
| إحصائيات الأسبوع | GetStorage | 3 ساعات |
| مسار الرحلة (Cached Route) | GetStorage | حتى رحلة جديدة |
| قائمة الفيديوهات | GetStorage | غير محدد |
| قائمة الرحلات المتاحة | GetStorage | 5 ثوانٍ |
| Device Tier | GetStorage | 24 ساعة |
| الخرائط الأوفلاين | SQLite | 10km radius |
### 4.4 Image Optimization Pipeline
```dart
// خطوة 1: تدوير الصورة تلقائياً (Auto-rotate)
// خطوة 2: قص المستند (Auto-crop)
// خطوة 3: ضغط إلى 70% جودة
// خطوة 4: تصغير إلى 1024x1024
// خطوة 5: رفع مع 3 محاولات + Exponential Backoff
```
---
## 5. تحسين الشبكة والاتصالات
### 5.1 SSL Pinning
- جميع الاتصالات HTTPS مع SSL Pinning
- يمنع هجمات Man-in-the-Middle
- JWT مع Validate قبل كل طلب (30s buffer)
### 5.2 Connectivity Guard
```dart
// قبل كل طلب → تحقق من الاتصال
final connectivityResult = await Connectivity().checkConnectivity();
if (connectivityResult == ConnectivityResult.none) return;
// تأكيد الوصول للإنترنت
final hasInternet = await InternetConnectionChecker().hasConnection;
```
### 5.3 Socket Optimization
| الخاصية | Driver Socket | Passenger Socket |
|----------|---------------|------------------|
| Transport | WebSocket only | WebSocket only |
| Auto-connect | Manual (disableAutoConnect) | Manual |
| Reconnection | Infinite | 20 attempts |
| Reconnect delay | Default | 2s → max 10s |
| Connection timeout | Default | 20s |
### 5.4 HTTP Optimization
```
Upload Retries: 3 محاولات
Backoff: 2s, 4s, 6s (exponential)
Timeout: 120 ثانية للرفع
401 Handling: Auto-refresh JWT + Retry
```
---
## 6. تصنيف فئات الأجهزة
### 6.1 Device Tier (siro_rider/lib/controller/home/device_tier.dart)
```
نظام تسجيل بناءً على:
- Android SDK version (الأقدم = أعلى نقاط = أضعف)
- عدد أنوية المعالج
- عدد ABIs المدعومة
- هل هو Emulator؟
التصنيف:
- Low: Score ≥ 6
- Mid: Score ≥ 3
- High: Score < 3
- Clobal (يحفظ لمدة 24 ساعة)
```
### 6.2 Device Performance (siro_rider/lib/controller/home/device_performance.dart)
```
نظام White-List للأجهزة عالية الأداء:
- Samsung: S21+ (SM-S), Fold/Flip (SM-F), Note 9+ (SM-N9), S10/S20 (SM-G9)
- Google: Pixel 6/7/8/9, Pixel Fold
- Huawei: P40, Mate 20/30/40
- OnePlus: 7/8/9/10/11, CPH prefix
- Xiaomi: RAM > 7.5GB
- Blacklist: MT65xx, MT6735, SC77xx (معالجات رخيصة)
- iOS: دائماً High-end
```
### 6.3 NearBy Drivers Performance (nearby_drivers_controller.dart)
```dart
// كشف الأداء المنخفض:
lowPerf = (sdk < 28) || (ram > 0 && ram < 3 * 1024 * 1024 * 1024);
// يخفض زوم الخريطة من 15 إلى 14.5
```
### 6.4 Device Analyzer (siro_driver/lib/controller/functions/device_analyzer.dart)
```
نظام تسجيل كامل (100 نقطة كحد أقصى):
1. Android version (max 10pts)
2. RAM (max 10pts): 8GB+ = 10, 4GB+ = 5, 3GB+ = 3
3. CPU cores (max 10pts): 6+ = 10, 4+ = 5
4. Free storage (max 5pts): 5GB+ = 5, 2GB+ = 3
5. GPS + Gyroscope (max 10pts)
6. Storage write speed test (max 20pts) — يكتب 5MB ويقيس السرعة
7. CPU compute speed test (max 20pts) — 100M floating point iterations
8. Memory pressure (max 15pts) — /proc/meminfo
```
---
## 7. الخدمات الخلفية
### 7.1 Android Foreground Service
```dart
// الميزات:
- تشتغل 24/7
- تحديث الموقع عبر LocationController (وليس من Background Service)
- لا تحتوي على GPS (قاعدة معمارية)
- Notification بأقل أولوية (Importance.low)
- إعادة تشغيل تلقائي عند BOOT_COMPLETED
- تدعم Picture-in-Picture
```
### 7.2 iOS Background
```dart
// iOS: لا يشغل Background Service
// يعتمد على تحديثات الموقع من iOS system
// LocationController يستخدم enableBackgroundMode من package
```
### 7.3 Geofencing (Hardware-level)
```
يستخدم native_geofence package:
- Android: GeofencingApi (hardware)
- iOS: CLRegion (hardware)
- فعال جداً للبطارية
- مشغل من الخادم
```
---
## 8. نقاط الضعف والتوصيات
### 8.1 المشكلات الحالية
| # | المشكلة | التأثير | الحل المقترح | الجهد |
|---|---------|---------|--------------|-------|
| 1 | **WakeLock دائم** | يستنزف البطارية خارج الرحلات | تشغيل فقط أثناء الرحلة النشطة | 1 يوم |
| 2 | **GPS accuracy = navigation** | أعلى دقة حتى في توفير الطاقة | استخدام high بدلاً من navigation في توفير الطاقة | 2 ساعة |
| 3 | **لا تكيف حسب السرعة** | نفس الـ Polling في الحركة والتوقف | إيقاف GPS عند السرعة = 0 (متوقف) | 1 يوم |
| 4 | **Doze Mode** | لم يتم التعامل مع Android Doze | استخدام FCM لتجاوز Doze | 2 يوم |
| 5 | **حجم التطبيق كبير** | Flutter + حزم كثيرة | App Bundle، إزالة الحزم غير المستخدمة | مستمر |
| 6 | **بدء التشغيل بطيء** | WakeLock + Firebase + Location | تأجيل Initialization بعد Splash Screen | 2 يوم |
| 7 | **Animation Jank** | أحياناً تقطيع في الرسوم المتحركة | استخدام GPU Profiling لاكتشاف المشاكل | مستمر |
### 8.2 تحسينات مقترحة — التفاصيل
#### 🔧 تحسين 1: Smart WakeLock
```dart
// الوضع الحالي:
// في main.dart:
await WakelockPlus.enable(); // دائم — مشكلة
// الوضع المقترح:
// في RideLifecycleController:
void onRideStateChanged(RideState state) {
switch (state) {
case RideState.searching:
case RideState.inProgress:
case RideState.driverArrived:
await WakelockPlus.enable(); // فقط أثناء الرحلة
break;
case RideState.noRide:
case RideState.finished:
case RideState.cancelled:
await WakelockPlus.disable(); // يسمح للسكون
break;
}
}
```
#### 🔧 تحسين 2: GPS Speed-adaptive
```dart
// الوضع المقترح:
if (speed < 0.5) {
// متوقف — أوقف GPS بالكامل أو خفف الجهد
interval = 30000; // 30 ثانية بدلاً من 5
distanceFilter = 100; // 100 متر بدلاً من 10
} else if (speed < 10) {
// حركة بطيئة
interval = powerSaveMode ? 15000 : 8000;
distanceFilter = powerSaveMode ? 30 : 15;
} else {
// سرعة عادية
interval = powerSaveMode ? 10000 : 5000;
distanceFilter = powerSaveMode ? 20 : 10;
}
```
#### 🔧 تحسين 3: تقليل حجم التطبيق
```
الحلول المقترحة:
1. Android App Bundle (توفير 30-40% حجم)
2. حذف الحزم غير المستخدمة (flutter_overlay_window للـ Rider — لا يحتاجه)
3. استخدام Lottie بدلاً من GIF للرسوم المتحركة
4. Shorebird OTA للتحديثات (مستخدم بالفعل)
5. حذف assets غير المستخدمة
6. Flutter DevTools لتحديد الـ Bloat
```
#### 🔧 تحسين 4: Startup Time Optimization
```dart
// حلاً مقترحاً لتسريع بدء التشغيل:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(SpashScreen()); // أولاً: شاشة البداية سريعة
// ثم في الخلفية:
Future.wait([
initializeFirebase(), // غير ضروري فوراً
initLocationController(), // غير ضروري فوراً
WakelockPlus.enable(), // يمكن تأجيله
loadUserSession(), // ضروري
]).then((_) => runApp(SiroApp())); // بعد التحميل
}
```
---
## 9. خطة التحسين المقترحة
### الأسبوع 1: تحسينات سريعة
- [ ] Smart WakeLock — تشغيل فقط أثناء الرحلة
- [ ] GPS accuracy = high في توفير الطاقة (بدلاً من navigation)
- [ ] تفعيل Android App Bundle
### الأسبوع 2: تحسينات متوسطة
- [ ] GPS Speed-adaptive polling
- [ ] Doze Mode handling
- [ ] تأجيل Initialization بعد Splash
### الأسبوع 3: تحسينات متقدمة
- [ ] تحليل الـ Memory Leaks عبر DevTools
- [ ] تفريغ الخريطة عند عدم ظهورها
- [ ] حذف الحزم غير المستخدمة
### الأسبوع 4: مراقبة واختبار
- [ ] اختبار استهلاك البطارية على 10 أجهزة مختلفة
- [ ] قياس FPS والـ Jank
- [ ] قياس وقت بدء التشغيل
---
## خاتمة
**نظام تحسين البطارية في سيرو متقدم جداً مقارنة بمنافسيه** — نظام GPS المتكيف مع وضع توفير الطاقة التلقائي، و Batch Upload، والمعمارية التي تفصل GPS عن Background Service كلها قرارات تصميمية ممتازة.
**نقاط القوة**: Heartbeat الذكي، Distance Filter، Movement-based recording، Geofencing hardware-level
**نقاط الضعف**: WakeLock الدائم، GPS accuracy ثابت، عدم التكيف مع السرعة، حجم التطبيق
**التقييم العام**: 8/10 مع إمكانية رفع إلى 9.5/10 بعد التحسينات المقترحة
> "سيرو لديها أفضل نظام إدارة بطارية رأيناه في منصات النقل بالمنطقة، مع تحسينات بسيطة يمكن أن تصبح الأفضل عالمياً"