summaryrefslogtreecommitdiff
path: root/jni/com_android_terminal_Terminal.cpp
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2013-02-21 19:09:55 -0800
committerJeff Sharkey <jsharkey@android.com>2013-02-21 19:11:41 -0800
commita76e33884c55bbd5db7e512b7687210cc3f635cf (patch)
tree8dd2f597d2a5779e9edba26fe660617ff92130f2 /jni/com_android_terminal_Terminal.cpp
parent479bd643981271fb0edf756ae5915e44a7352c4d (diff)
downloadTerminal-a76e33884c55bbd5db7e512b7687210cc3f635cf.tar.gz
Start hooking up damage, shell script to test.
It's still pretty broken and I need to grok how damage and moveRect play together. Avoid allocations inside onDraw(). Change-Id: I0fca467439178d902c4d11ff1523a0ec25c2dd39
Diffstat (limited to 'jni/com_android_terminal_Terminal.cpp')
-rw-r--r--jni/com_android_terminal_Terminal.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/jni/com_android_terminal_Terminal.cpp b/jni/com_android_terminal_Terminal.cpp
index 7545a35..e195913 100644
--- a/jni/com_android_terminal_Terminal.cpp
+++ b/jni/com_android_terminal_Terminal.cpp
@@ -34,6 +34,8 @@
#include <string.h>
+#define USE_TEST_SHELL true
+
namespace android {
/*
@@ -79,7 +81,9 @@ public:
size_t write(const char *bytes, size_t len);
+ int flushDamage();
int resize(short unsigned int rows, short unsigned int cols);
+
int getCell(VTermPos pos, VTermScreenCell* cell);
int getRows() const;
@@ -245,7 +249,8 @@ Terminal::Terminal(jobject callbacks, int rows, int cols) :
mVts = vterm_obtain_screen(mVt);
vterm_screen_enable_altscreen(mVts, 1);
vterm_screen_set_callbacks(mVts, &cb, this);
- vterm_screen_set_damage_merge(mVts, VTERM_DAMAGE_SCROLL);
+ // TODO: switch back to VTERM_DAMAGE_SCROLL?
+ vterm_screen_set_damage_merge(mVts, VTERM_DAMAGE_CELL);
vterm_screen_reset(mVts, 1);
}
@@ -304,7 +309,12 @@ int Terminal::run() {
}
char *shell = "/system/bin/sh"; //getenv("SHELL");
+#ifdef USE_TEST_SHELL
+ char *args[4] = {shell, "-c", "x=1; while true; do echo \"stop echoing yourself! ($x)\"; x=$(( $x + 1 )); sleep 0.5; done", NULL};
+#else
char *args[2] = {shell, NULL};
+#endif
+
execvp(shell, args);
fprintf(stderr_save, "Cannot exec(%s) - %s\n", shell, strerror(errno));
_exit(1);
@@ -334,6 +344,11 @@ size_t Terminal::write(const char *bytes, size_t len) {
return ::write(mMasterFd, bytes, len);
}
+int Terminal::flushDamage() {
+ vterm_screen_flush_damage(mVts);
+ return 0;
+}
+
int Terminal::resize(short unsigned int rows, short unsigned int cols) {
ALOGD("resize(%d, %d)", rows, cols);
// TODO: wait for resize event to propegate back from shell?
@@ -375,6 +390,11 @@ static jint com_android_terminal_Terminal_nativeRun(JNIEnv* env, jclass clazz, j
return term->run();
}
+static jint com_android_terminal_Terminal_nativeFlushDamage(JNIEnv* env, jclass clazz, jint ptr) {
+ Terminal* term = reinterpret_cast<Terminal*>(ptr);
+ return term->flushDamage();
+}
+
static jint com_android_terminal_Terminal_nativeResize(JNIEnv* env,
jclass clazz, jint ptr, jint rows, jint cols) {
Terminal* term = reinterpret_cast<Terminal*>(ptr);
@@ -445,6 +465,7 @@ static jint com_android_terminal_Terminal_nativeGetCols(JNIEnv* env, jclass claz
static JNINativeMethod gMethods[] = {
{ "nativeInit", "(Lcom/android/terminal/TerminalCallbacks;II)I", (void*)com_android_terminal_Terminal_nativeInit },
{ "nativeRun", "(I)I", (void*)com_android_terminal_Terminal_nativeRun },
+ { "nativeFlushDamage", "(I)I", (void*)com_android_terminal_Terminal_nativeFlushDamage },
{ "nativeResize", "(III)I", (void*)com_android_terminal_Terminal_nativeResize },
{ "nativeGetCellRun", "(IIILcom/android/terminal/Terminal$CellRun;)I", (void*)com_android_terminal_Terminal_nativeGetCellRun },
{ "nativeGetRows", "(I)I", (void*)com_android_terminal_Terminal_nativeGetRows },