This commit is contained in:
zhongchao
2021-06-29 11:20:13 +08:00
parent f98e18a282
commit 11c9486240

View File

@@ -95,6 +95,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
Logger.d(TAG, "%s - %s", descriptor, isTrue);
mChangeCarModeStatus = true;
sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches);
removeUselessMarker(mMarkersCaches);
mMarkersCaches = new ConcurrentHashMap<>();
mLastPositions.clear();
AdasRecognizedResultDrawer.getInstance().notifyVrModeChanged(); //清除ADAS old marker data
@@ -170,7 +171,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
IMogoMarker marker = mMarkersCaches.remove(uniqueKey);
if (marker != null && !marker.isDestroyed()) {
updateCacheMarkerRes(marker, cloudRoadData);
renderSnapshotOneFrame(marker, uniqueKey, cloudRoadData, newMarkersCaches);
renderSnapshotOneFrame(true, marker, uniqueKey, cloudRoadData, newMarkersCaches);
} else {
newDiffSet.add(cloudRoadData);
}
@@ -179,50 +180,51 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
removeUselessLastRecord();
// 能复用的 marker 数量
int cachedMarkerSize = mMarkersCaches.size();
// int cachedMarkerSize = mMarkersCaches.size();
// 需要新增的 marker 数量
int newDiffSetSize = newDiffSet.size();
// 能复用的数量
int size = Math.min(cachedMarkerSize, newDiffSetSize);
// int size = Math.min(cachedMarkerSize, newDiffSetSize);
// 复用过期 marker
if (newDiffSetSize > 0) {
Iterator<Map.Entry<String, IMogoMarker>> entryIterator = mMarkersCaches.entrySet().iterator();
for (int i = 0; i < size; i++) {
SocketDownData.CloudRoadDataProto cloudRoadData = newDiffSet.get(i);
String uniqueKey = cloudRoadData.getUuid();
Map.Entry<String, IMogoMarker> entry = entryIterator.next();
entryIterator.remove();
SocketDownData.CloudRoadDataProto old = mLastPositions.remove(entry.getKey());
IMogoMarker marker = entry.getValue();
if (marker == null) {
continue;
}
// 更新资源内容
if (old == null || old.getType() != cloudRoadData.getType()) {
updateCacheMarkerRes(marker, cloudRoadData);
}
renderSnapshotOneFrame(marker, uniqueKey, cloudRoadData, newMarkersCaches);
}
// Iterator<Map.Entry<String, IMogoMarker>> entryIterator = mMarkersCaches.entrySet().iterator();
// for (int i = 0; i < size; i++) {
// SocketDownData.CloudRoadDataProto cloudRoadData = newDiffSet.get(i);
// String uniqueKey = cloudRoadData.getUuid();
// Map.Entry<String, IMogoMarker> entry = entryIterator.next();
// entryIterator.remove();
// SocketDownData.CloudRoadDataProto old = mLastPositions.remove(entry.getKey());
// IMogoMarker marker = entry.getValue();
// if (marker == null) {
// continue;
// }
//
// // 更新资源内容
// if (old == null || old.getType() != cloudRoadData.getType()) {
// updateCacheMarkerRes(marker, cloudRoadData);
// }
// renderSnapshotOneFrame(marker, uniqueKey, cloudRoadData, newMarkersCaches);
// }
// 复用过后还需新增的 marker
for (int i = size; i < newDiffSetSize; i++) {
for (int i = 0; i < newDiffSetSize; i++) {
SocketDownData.CloudRoadDataProto cloudRoadData = newDiffSet.get(i);
String uniqueKey = cloudRoadData.getUuid();
IMogoMarker marker = drawSnapshotDataMarker(cloudRoadData);
if (marker == null) {
continue;
}
renderSnapshotOneFrame(marker, uniqueKey, cloudRoadData, newMarkersCaches);
renderSnapshotOneFrame(false, marker, uniqueKey, cloudRoadData, newMarkersCaches);
}
}
if (cachedMarkerSize - size > 0) {
sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches);
}
// if (cachedMarkerSize - size > 0) {
// sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches);
// }
sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches);
mMarkersCaches.clear();
mMarkersCaches = newMarkersCaches;
}
@@ -291,7 +293,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
* @param cloudRoadData {@link SocketDownData.CloudRoadDataProto}
* @param newSnapshotCaches 缓存数据
*/
private void renderSnapshotOneFrame(IMogoMarker marker, String uniqueKey, SocketDownData.CloudRoadDataProto cloudRoadData, Map<String, IMogoMarker> newSnapshotCaches) {
private void renderSnapshotOneFrame(boolean useCache, IMogoMarker marker, String uniqueKey, SocketDownData.CloudRoadDataProto cloudRoadData, Map<String, IMogoMarker> newSnapshotCaches) {
Logger.d(TAG, "renderSnapshotOneFrame");
final long start = System.currentTimeMillis();
@@ -315,8 +317,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
mLastPositions.put(uniqueKey, cloudRoadData);
newSnapshotCaches.put(uniqueKey, marker);
if (lastPosition != null) {
if (useCache) {
long interval = computeAnimDuration(lastPosition.getSystemTime(), cloudRoadData.getSystemTime(), lastPosition.getSatelliteTime(), cloudRoadData.getSatelliteTime());
final MogoLatLng point = new MogoLatLng(cloudRoadData.getWgslat(), cloudRoadData.getWgslon());
@@ -327,6 +328,9 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
marker.setRotateAngle(((float) cloudRoadData.getHeading()));
marker.setPosition(cloudRoadData.getWgslat(), cloudRoadData.getWgslon());
}
newSnapshotCaches.put(uniqueKey, marker);
marker.setAnchorColor(getModelRenderColor(cloudRoadData.getType(), cloudRoadData.getFromType(), cloudRoadData.getSpeed(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading()));
if (shouldShowSpeed(cloudRoadData.getType())) {
showSelfSpeed(marker, cloudRoadData.getSpeed(), cloudRoadData.getUuid(), cloudRoadData.getType(), MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode());