给 OPPO 手机做的优化

该优化代码只在 Cocos2d-x 3.17.2 及以上的版本起效,并且目前只在 OPPO Reno 有效果。

具体优化方案

引擎内部在两个地方添加了优化代码:

  • 场景加载
  • 编译引擎内置的 shader 脚本场景加载指的是从 Scene 创建到 Scene::onEnter() 被调用这段时间,所以加载资源的代码要放在 Scene::onEnter() 前,且需要在 Scene 创建后马上进行资源加载。

手动调用优化代码

程序比引擎更清楚什么时机需要更多的 CPU、GPU 资源,因此程序代码可以在需要更多资源的地方手动掉优化代码。可以在 C++ 或 Java 调用优化代码:

C++ 的调用方式

  1. // 通知系统某一事件发生,如场景加载开始,场景加载结束。3.17.2 之后才增加的绑定。
  2. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
  3. DataManager::setOptimise(const string&, const string&);
  4. #endif
  5. // 场景加载开始,需要更多的资源
  6. // 该接口适用于突发重负载的场景,如加载地图,GC、突发大量访问磁盘文件与数据库等
  7. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
  8. DataManager::onSceneLoaderBegin();
  9. #endif
  10. // 场景加载结束
  11. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
  12. DataManager::onSceneLoaderEnd();
  13. #endif
  14. // 开始编译 shader 脚本
  15. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
  16. DataManager::onShaderLoaderBegin();
  17. #endif
  18. // 结束编译 shader 脚本
  19. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
  20. DataManager::onShaderLoaderEnd();
  21. #endif

Java 的调用方式

  1. Cocos2dxDataManager::setOptimise(String thing, float value);
thing10
load_scene开始加载场景结束加载场景
shader_compile开始编译 shader 脚本结束编译 shader 脚本

V3.17.2 版本后,value 的类型由 float 变成了 string,这样就更灵活了。

thingvalue目前默认支持上述两种方式,如果需要更加定制化的控制,需遵循手机厂商的标准才能被正确识别并生效。如在OPPO手机上,需要首先调用 setOptimise("permission", permissionIInfo),其中 permissionIInfo 需登录OPPO开放平台申请授权码,然后再传输定制的参数才会生效。具体可参考该文档